Skip to content

HTTPS安全性

中间人攻击

中间人攻击的几种形式

  • 直接抓取报文获得明文信息

  • 非法中间加密代理,窃取明文信息

  • 留存密文,如果对称密钥泄露,解密历史报文

中间人攻击的防范

防范直接获取明文

加密传输报文

防范非法中间加密代理

黑客对客户端伪装成服务器,对服务器伪装成客户端,通过非法代理窃取会话数据。上面图示的第一、第二阶段可以防止这种非法代理行为。虽然黑客可以获取站点的证书,伪装成站点服务器接收请求,但黑客没有站点服务器私钥,无法与实现客户端实现密钥交换,不能窃取明文的会话数据。

防范解密历史报文(前向安全性)

防范解密历史报文,这种安全防护叫前向安全。早期的HTTPS实现中,客户端将会话密钥通过站点公钥加密后,发送给服务器,服务器用私钥解密。此时如果服务器私钥保管不善泄露,黑客如果留存了历史报文,可以解密获取会话密钥,从而还原历史报文数据。目前通过DH算法保证前向安全。在第二阶段,客户端与服务器只交换少量信息,双方便可独立计算出临时会话密钥用于加密。即使黑客事后获取私钥,也不能计算出会话密钥,从而实现前向安全。

FAQ

为什么不直接使用非对称密钥加密传输报文?

首先非对称密钥加解密效率低,不如对称密钥,一般使用AES等加密算法。其次前面也提到,只使用非对称密钥加解密不能保证前向安全性。

浏览器怎么知道所访问的站点不是伪造的?

浏览器主要依靠数字证书来确认所访问的站点不是伪造的。当浏览器通过https访问站点,站点须返回数字证书。数字证书是CA机构“签发”的电子文件,其中包含使用者信息、站点公钥、颁发者(CA)信息和CA指纹等。假设数字证书是完全可信的,且其中的内容也是不可篡改的。浏览器首先验证数字证书中的使用者(站点)信息与所访问的站点域名是否一致,然后用数字证书中的站点公钥挑战站点服务器,只用拥有私钥的真实站点才能通过挑战。因此可以确保所访问的站点是真实的。

注意:如果验证有问题,浏览器会提示风险访问。

为什么数字证书是可信的?

CA机构是可信的,CA本身也包含一个非对称密钥对,私钥用于“签发”的数字证书,公钥发布出去用于验证数字证书。CA使用非对称密钥配合HASH算法保证数字证书可信且不可篡改。CA将使用者信息、站点公钥、有效期等关键信息打包做HASH运算,再将HASH运算结果用CA私钥签名生成指纹。然后将以上全部信息打包成数字证书。黑客没有私钥不可以伪造证书签名,且证书的内容如果被修改,HASH结果就会改变。因此黑客不可伪造或者篡改证书,有效的数字证书是可信的。

浏览器怎么知道CA是可信的?

浏览器主要依据客户端操作系统保存的根证书列表判断CA的权威性。如上图,在Windows操作系统中,这个列表放在“受信任的根证书颁发机构存储区”中,这个列表实际上是CA机构的根证书集合,根证书包含CA机构的信息和公钥。只要是这个列表中的CA签发的证书,浏览器就认为可信。微软会动态维护根证书列表,用户需要管理员权限才能向这个列表中加入CA证书。

注:Windows客户端运行在内网中时,若无法联网更新根证书列表,此时可能会出向访问https应用缓慢。解决方法如下: