HTTPS是HTTP和SSL的结合。要理解SSL的加密技术,需要先了解一下加密方法。
首先接受几个前提:近代的加密方法中加密算法是公开的,而密钥是保密的;加密和解密都要用密钥;任何人只要持有密钥就能解密。
比较基础的加密方式:共享密钥
加密和解密使用相同的密钥,也被称为对称密钥加密。
使用这种方式加密时,必须将密钥也发给对方,但HTTP本身不安全,传送密钥就有被窃听的风险,一旦密钥被被黑客取得,就失去了加密的意义。
比较高级的加密方式:公开密钥
又被称为非对称密钥,即存在两把不同的密钥,一把私钥,一把公钥。私钥为自己所有,不能让任何人知道,而公钥任何人都可获得。
公开密钥的加密流程为,发送方使用接收方的公钥对文件进行加密处理,接收方取得密文后,再使用私钥进行解密。
HTTPS的加密方式
在了解这些背景知识后,再来看HTTPS,其采用的是共享密钥和公开密钥混合的加密机制。
这主要是出于性能的考虑,公开密钥的处理速度较慢且会占用较大的内存资源。所以在第一次建立通信时,使用公开密钥将共享密钥传送给对方,这可以保证共享密钥的绝对安全,此后的通信中,就可以使用共享密钥进行加密了。
然而,这种混合加密机制还是有漏洞。我们无法确认我们将要使用的公钥就是我们想要进行通信的那台服务器发行的公钥。因为可能在公钥的传输过程中,其就被黑客替换了。
也就是说,我们需要找到方法证明我们拿到的公钥是真实可靠的。
公开密钥证书
对策:使用数字证书认证机构(CA)颁布的公开密钥证书。
CA为第三方权威机构,其工作流程是:服务器方向CA提出申请验证公钥;CA验证服务器方身份;CA用自己的私钥对其公钥加密形成一个数字签名,把签名同公钥一起放入公钥证书。
在通信时,服务器将公钥证书发给客户端,客户端利用已经内置在浏览器里的CA公钥解密数字签名,然后对比解密后得到的公钥和证书中的未加密公钥,二者一致,则可确认该公钥的真实性。
证书的还有一个作用是用来证明通信一方的服务器的规范性,以及服务器背后的企业的真实性。并不是所有的证书都有这种能力,拥有这种特性的证书是EV SSL证书。
持有该证书的web网站的浏览器地址栏背景色为绿色,该机制的意图是防止用户被钓鱼攻击。
客户端证书
证明客户端身份的证书为客户端证书。这种证书目前在应用上存在两个问题:
第一,用户需要自行安装证书,而证书是需要付费购买的。现状是,客户端证书仅用于特殊业务,由服务器方支撑证书费用,例如网上银行。
第二,证书只能证明客户端实际存在,不能用来证明用户本人的真实性。
自签名证书
使用OpenSSL开源程序,可以构建属于自己的认证机构,自己给自己颁证书。但这种证书在互联网上不可作为证书使用,用处不大。
HTTPS的安全机制
HTTPS完成一次通信的流程:
- 客户端发送Client Hello报文至服务器开始SSL通信。报文包含支持的SSL版本及加密组件。
- 服务器可进行SSL通信时,以Server Hello报文作为应答。报文包含支持的SSL版本及加密组件。
- 服务器发送Certificate报文,内含证书。
- 服务器发送Server Hello Done报文。
SSL第一次握手协商结束。
- 客户端发送Client Key Exchange报文。报文包含密码,且该报文已用步骤3中收到的公钥加密。
- 客户端发送Change Cipher Spec报文。报文提示服务器之后所有报文采用步骤5中发出的密码加密。
- 客户端发送Finished报文。
- 服务器端同样发送Change Cipher Spec报文。
- 服务器端同样发送Finished报文。
双方Finished报文交换完毕,即SSL连接建立完成,此后的通信受SSL保护。开始应用层协议的通信,即发送HTTP请求。
- 客户端发送HTTP请求,服务器端响应。
- 通信完成由客户端断开连接。断开连接时,发送close_notify报文。
- 客户端发送TCP FIN报文关闭与TCP的连接。
网友评论