ssl - 在 HTTPS 连接中的 SSL 握手期间,客户端如何在加密传输开始之前安全地将 secert 发送到服务器
问题描述
我最近正在阅读HTTP The Definitive Guide一书的 Secure HTTP 章节。在本章中,它讨论了如何为 HTTPS 创建加密连接,并且有一个 SSL 握手图,如下所示
我的问题是客户端和服务器在第 4 步开始发送加密消息,但在第 3 步,他们如何安全地发送秘密。如果秘密被别人截获,它就会被盗,因为它没有加密。
解决方案
您引用的描述大多已过时。它适用于在早期 SSL(v2,然后是 v3)中创建并在 TLS 中延续了一段时间的原始形式的密钥交换,简称为“RSA”密钥交换,有时被强调为“普通 RSA”或“仅 RSA”。
[秘密] 将被盗,因为它没有加密。
它使用服务器的RSA 公钥(来自服务器的证书)加密,使用第一个免费发布的 RSA 加密标准,即PKCS1的 v1 (公钥加密标准 #1),来自当时的“实验室”子公司由 RSA 的发明者创立的公司。有关最新规范,请参阅rfc5246 第 7.4.7.1 节(此处不重复,因为它是三页)。正如那里所描述的,在选择 PKCS1v1.5 加密之后的几年里,针对它的攻击已经被发现并逐渐改进,降低了它的安全性并增加了替换它的动力(下图)。
然而,SSLv3 添加(早在比尔克林顿时代)并且 TLS 保留并改进了更好的密钥交换方法,在“短暂”模式下使用Diffie-Hellman,缩写为 DHE,以及后来的数学高级变体 Elliptic-Curve Diffie-Hellman,(两者之一)它提供了前向保密(有时被强调为完美的前向保密),结合 RSA、DSA 或 ECDSA 身份验证(签名)。多年来,安全专家建议人们使用这些改进的方法,但在斯诺登让全世界意识到大规模监视行动之前,他们大多被忽视了。在过去的 6 年中,人们几乎完全转向了基于 DHE 的密钥交换,而最新版本 TLS 1.3 于 2018 年发布,现在在很大一部分用途中实施,但还不是大多数,需要DHE 并且不再支持纯 RSA密钥交换。1.3 还重新排列了协议的部分内容,以便您所拥有的简化描述根本不正确,尽管它实现了相同的结果。
推荐阅读
- sql - sql综合查询
- vba - 创建新的 IUI 自动化处理程序对象以订阅自动化事件
- android - Listview ArrayAdapter 自定义项 onClickListener 仅第一次工作
- r - 使用 mailR 发送 html 时出错“只能在非 UTF-8 MBCS 语言环境中读取字节”
- javascript - 如何使用 Javascript 设置滑块元素的值?
- python - 如何将两个值作为字符串连接到odoo Char字段中?
- javascript - Bokeh CustomJS 回调以在滑块移动时更改 DataFrame 的行
- snowflake-cloud-data-platform - 在雪花的创建脚本中添加当前日期
- python - 当原始程序关闭时,如何停止从另一个 python 程序中启动的烧瓶应用程序?
- mariadb - mysqldump:无法执行'show create table `xxx.yyy`':引擎中不存在表'yyy'(1932)