在HTTP协议中有可能存在信息窃听或身份伪装等安全问题,使用HTTPS通信机制可以有效的防止这些问题。
参考: SSL/TLS协议运行机制的概述
通信使用明文,内容可能会被窃听
TCP/IP是可能被窃听的网络:按TCP/IP协议族的工作机制,通信内容在所有线路上都有可能遭到窥视。加密处理防止被窃听,加密的对象如下: 通信的加密 通过和SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全层传输协议)的组合使用,加密HTTP的通信内容。内容的加密 把HTTP报文里所含的内容加密。不验证通信方的身份,可能会被伪装
不确认通信方,会存在以下隐患:
无法确定请求发送至目标的Web服务器是否是按真是意图返回响应的那台服务器,有可能是已伪装的Web服务器。无法确定响应返回到的客户端是否是按照真实意图接收响应的那个客户端,有可能是伪装的客户端。无法确定正在通信的对方是否具备访问权限,因为某些Web服务器上保存着重要的信息,只想发给特定用户通信的权限。无法判断请求是来自何方、出自谁手即使是无意义的请求也会照单全收,无法阻止海量请求下的Dos攻击(Denial of Service,拒绝服务攻击)。查明对手的证书 SSL不仅提供加密处理,还使用了一种被称为证书的手段,可用于确定方。 证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的。 使用证书,以证明通信方就是意料中的服务器,对使用者个人来讲,也减少了个人信息泄露的危险性。另外,客户端持有证书即可完成个人身份的确认,也可用于对Web网站的认证环节。
无法验证报文的完整性,可能遭篡改 接收到的内容可能有误,在请求或响应送出之后直到对方接收之前的这段时间内,即使请求或响应的内容遭到篡改,也没有办法获悉。 在请求或响应的传输途中,遭攻击者拦截并篡改内容的攻击称为中间人攻击(Man-in-the-Middle attack)。 仅靠HTTP确保完整性是非常困难的,便有赖于HTTPS来实现。
把添加了加密、认证机制、完整性保护的HTTP称为HTTPS(HTTP Secure)。
HTTPS是身披SSL外壳的HTTP HTTPS并不是应用层的一种新协议,只是通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替而已。 HTTP会先和SSL通信,再由SSL和TCP通信,即披了一层SSL的外壳。 SSL是独立于HTTP的协议,所有不光是HTTP协议,其他运行在应用层的SMTP和Telnet等协议均可配合SSL协议使用。可以说SSL是当今世界上应用最广泛的网络安全技术。
相互交换密钥的公开密钥加密技术 SSL采用公开密钥加密的加密处理方式。
共享密钥加密: 加密和解密同用一个密钥的方式,也叫对称密钥加密。 以共享密钥方式来加密时,必须将密钥也发给对方。这就有两个问题:如何安全的发送、如何安全的存储。这就是共享密钥加密的不好之处。
公开密钥加密 公开密钥加密使用一对非对称的密钥。一把私有密钥,一把公开密钥,公开密钥和私钥是配对的。 使用公开密钥加密方式时,发送密文的一方使用对方的公开密钥进行加密,对方收到被加密的信息后,再使用自己的私有密钥进行解密。这种方式不需要发送用来解密的私钥,也不必担心密钥被攻击者窃听盗走。 再者,根据密文和公开密钥恢复信息原文是非常困难的。
HTTPS采用混合加密机制 HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制。 因为公开密钥加密的处理速度要慢于共享密钥加密。所以HTTPS利用两者的优势,在交换密钥环节使用公开密钥加密方式,在建立通信交换报文阶段则使用共享密钥加密方式。
公开密钥加密方式的问题: 无法证明公开密钥本身就是货真价实的公开密钥。即如何证明客户端收到的公开密钥就是原本预想的那台服务器发行的公开密钥;或在公开密钥传输途中,真正的公开密钥已被攻击者替换掉了。
为了解决上述问题,可使用由数字证书认证机构和其相关机关颁发的公开密钥证书。数字认证机构处于客户端与服务器双方都可信赖的第三方机构的立场上。
证书使用流程: 首先,服务器的运营人员向数字证书认证机构提出公开密钥申请,该机构在判明申请者身份后,会对已申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入公钥证书后绑定在一起。 服务器会将这份公钥证书发送给客户端,以进行公开密钥加密方式通信。 客户端可使用该机构的公开密钥,对该证书上的数字签名进行验证,一旦验证通过,客户端便明确两件事:1.认证服务器的公开密钥是真实有效的数字证书认证机构; 2.服务器的公开密钥是值得信赖的。 此处认证机关的公开密钥必须安全的转交给客户端。使用通信方式时,如何安全转交是比较困难的,因此,多数浏览器在发布版本时,会预先内部植入常用的认证机关的公开密钥。
可证明组织真实性的EV SSL证书 证书的作用:1. 证明作为通信一方的服务器是否规范;2.确认对方服务器背后运营的企业是否真实存在。拥有该特性的证书就是EV SSL证书(Extended Validation SSL Certificate)。
EV SSL证书是基于国际标准的认证指导方针颁发的证书,其严格规定了对运营组织是否真实的确认方针,因此通过认证的Web网站能够获得更高的认可度。
用以确认客户端的客户端证书 HTTPS中还可以使用客户端证书,以客户端证书进行客户端认证,证明服务器正在通信的对方始终是预料之内的客户端。想获取证书时,用户得自行安装客户端证书。 现状是,安全性极高的认证机构可颁发客户端证书但仅用于特殊用途的业务,比如网上银行等。
由自认证机构颁发的证书为自签名证书 使用OpenSSL这套开源程序,可以构建一套属于自己的认证机构,从而给自己颁发服务器证书,但在互联网上不可用,浏览器访问该服务器时,会显示无法确认链接安全性或该网站的安全证书存在问题等警告信息。
HTTP会先和SSL通信,再由SSL和TCP通信,即披了一层SSL的外壳。
SSL/TLS协议的基本过程是这样的: (1) 客户端向服务器端索要并验证公钥。 (2) 双方协商生成"对话密钥"。 (3) 双方采用"对话密钥"进行加密通信。 前两步又称为握手阶段:
客户端通过发送Client Hello报文开始SSL通信。报文中包含客户端支持的SSL的指定版本、加密组件(Cipher Suite)列表(所使用的加密算法及密钥长度等)。
服务器可进行SSL通信时,会以Server Hello报文作为应答。可客户端一样,在报文中包含SSL版本及加密组件。服务器的加密组件内容是从收到的客户端加密组件内筛选出来的。
之后服务器发送Certificate报文,报文中包含公开秘钥证书。
最后服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束。
SSL第一次握手结束之后,客户端以Client Key Exchange报文作为回应,报文中包含通信加密中使用的一种被称为Pre-master secret的随机密码串。该条报文已用步骤3中的公钥进行加密。
接着服务器继续发送Change Cipher Spec报文。该报文会提示服务器,在此报文之后的通信会采用Pre-master secret密钥加密。
客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准。
服务器同样发送Change Cipher Spec报文。
服务器同样发送Finished报文。
服务器和客户端的Finished报文交换完毕后,SSL连接就算建立完成。当然,通信会受到SSL的保护。从此处开始进行应用层协议的通信,即HTTP通信,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过用"会话密钥"加密内容。
最后由客户端断开连接。断开连接时,发送close_notify报文。这步之后再发送TCP FIN报文来关闭与TCP的通信。
HTTPS使用SSL和TLS,它的处理速度会变慢:
出去喝TCP连接、发送HTTP请求响应外,还必须进行SSL通信,整体上通信量会增加;必须进行加密处理,服务器和客户端都要进行加密解密处理,会更多的消耗服务器和客户端的硬件资源,导致负载增加。