SSL 证书背后的加密算法(HTTPS)
如果您在浏览器地址栏中输入以 https 开头的 URL,则在接下来的几百毫秒内,浏览器与服务器之间将发生大量通信。这些复杂步骤中的第一步是浏览器和服务器协商将在后续通信中使用的关键算法。流程简单来说就是:
浏览器向服务器发送一系列自己支持的密码套件(关键算法套件,以下简称密码)[C1,C2,C3,…];
服务器从浏览器接收到每个密码后,将其与其支持的包进行比较。如果发现双方都支持的密码,则会通知浏览器;
浏览器和服务器使用适当的密码进行后续通信。如果服务器没有找到合适的算法,浏览器(以Firefox 30为例,以下示例中使用的浏览器均为该版本的Firefox)会给出错误信息:
![]()
1。浏览器
浏览器支持什么密码?这取决于浏览器支持的 SSL/TLS 协议版本。在习惯,我们通常结合HTTPS和SSL协议;事实上,SSL协议是Netcape公司在20世纪90年代中期提出的协议,并自行发展了多个版本。 1999年,该协议被ITEL采用,进行标准化并更名为TLS。可以说,TLS 1.0 就是 SSL 3.1 版本。
最新版本的 TLS 目前已可用。互联网上超过 99% 的网站支持 TLS 1.0,而只有不到 40% 的网站支持 TLS。打开Firefox浏览器,在地址栏输入about:config,然后搜索,会看到如下选项:
![]()
其中,security..min和security..max决定了Firefox支持的SSL/TLS版本。根据Firefox文档,这两个元素及其代表的协议的可选值为:
0 - SSL
1 - TLS 1.0
2 - TLS 1.1❀ – TLS
所以上图的设置表明当前浏览器支持的协议下限为SSL,上限为TLS。现在,如果将 security..min 元素更改为 3,则浏览器仅支持 TLS。如前所述,目前只有不到 40% 的网站支持 TLS。例如,亚马逊不低于40%。因此,如果此时访问,将会收到“安全连接失败”的错误信息,如图1所示。
了解了SSL/TLS协议后,你可以使用Wireshark(或者类似的可以捕获网络数据包的工具)通过分析网络数据包信息来查看从浏览器发送到服务器的所有密码。
浏览器首先发起握手协议,即“ClientHello”消息。在消息正文中,您将找到 Firefox 支持的密码。在 Wireshark 中,按协议排序,然后从 TLS 协议消息中找到带有“Client Hello”信息的协议。选择此项,然后在下面的消息信息窗口中找到安全套接字层 -> TLSv 记录层 -> 握手协议 -> 密码套件。示例中的第一个密码是 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,总共 23 个: ![]()
如果继续搜索包含“ServerHello”信息的消息,您会在类似的位置找到服务器返回的密码,在本例中。就是 TLS_ECDHE_RSA_WITH_AES_256_CBC
_SHA:
密钥算法长名的含义后面会解释。接下来,浏览器等待服务器响应其请求。让我们看看服务器端做了什么。
2。服务器
以Windows为例。要检查操作系统支持哪些关键算法,可以运行并进入“计算机配置”->“管理模板”->“网络”->“SSL 配置设置”。您可以在窗口右侧看到“SSL 密码”。 “套件订购”项目:
![]()
点击此项目进入“SSL 密码套件订购”。这里可以看到操作系统支持的密码的集合,以及不同密码的排序
![]()
如果需要调整这里的排序或者去掉一些弱密码,可以点击左上角的“启用”角落,然后在“选项”中重置写入和更改密码列表。如果您更喜欢命令行,可以通过以下 Powershell 命令更改密钥算法套件:
Set-ItemProperty -path HKLM:\SOFTWARE\Policies\Microsoft\Cryptography\Configuration\SSL\0001002 -name Functions -value "XXX,XXX,XXX"
那么这一长串密码名称意味着什么?其实每个cipher的名字都包含了四部分信息,分别是
密钥交换算法,用于决定握手过程中客户端和服务器之间如何进行认证。使用的算法包括RSA、Diffie-Hellman、ECDH、PSK等。名称后面通常跟着两个数字,分别表示密钥的长度和初始向量的长度,例如 DES 56/56、RC2 56/128、RC4 128/128、AES 128/128、AES 256/256
消息认证信息码(MAC)算法,用于创建消息摘要以保证消息完整性(不加扰),算法包括MD5、SHA等。 ,用于生成“主秘密”。
要完全理解以上内容似乎需要一本书的介绍(我已经超出了我的能力)。然而,一般性的理解有助于理解密码的名称。比如之前服务器发回给客户端的密码,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
从名字就可以看出,它是
基于TLS协议的;
采用ECDHE、RSA作为密钥交换算法;
加密算法为AES(密钥长度和初始向量均为256);
MAC算法(这里是哈希算法)就是SHA。
熟悉了密码名称背后的含义后,我们来看看像IIS这样的Web服务器如何选择密钥算法?如果浏览器发送的关键算法套件为[C1,C2,C3],Windows Server支持的套件为[C4,C2,C1,C3],则C1和C2都是双方都支持的算法。 IIS 应该先返回C1 还是C2? 答案是C2。 IIS会遍历服务器密钥算法套件,从第一个C4中取出,发现浏览器不支持;然后取浏览器支持的第二个C2!因此,IIS选择了C2算法并将其包含在“ServerHello”握手协议中并将其发送回客户端。结果如图 5 所示。
3。选择
作为浏览器用户,您可以允许浏览器仅访问支持 TLS 协议的网站,以获得更好的安全性和更好的体验。作为一个服务器持有者,似乎排名靠前的最强密码才是正确的选择。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网