TCP,SSL以及HTTPS的连接建立过程详解

TCP,SSL以及HTTPS的连接建立过程详解以上就是历史背景

大家好,欢迎来到IT知识分享网。

可以参考B站的一个视频,把TLS/SSL的连接建立过程降解的非常透彻。配合这篇博客食用更佳。一遍不懂请多看几遍,很有用!

加密过程如下:

加密:原文 + 密匙 = 密文

解密:密文 – 密匙 = 原文

优点:安全,即使密文被拦截、公钥被获取,但是无法获取到私钥,也就无法破译密文。作为接收方,务必要保管好自己的密钥。

缺点:加密算法非常复杂,安全性依赖算法与密钥,而且加密和解密效率很低,一般用于网站的SSL证书的验证

数字证书绑定了公钥及其持有者的真实身份,它类似于现实生活中的居民身份证,所不同的是数字证书不再是纸质的证照,而是一段含有证书持有者身份信息并经过认证中心审核签发的电子数据,广泛用在电子商务和移动互联网中。

服务端可以向证书颁发机构CA申请证书,以避免中间人攻击(防止证书被篡改)。证书包含三部分内容:tbsCertificate(to be signed certificate)待签名证书内容、证书签名算法和CA给的数字签名(使用证书签名算法对tbsCertificate进行哈希运算得到哈希值,CA会用它的私钥对此哈希值进行签名,并放在签名部分)。签名是为了验证身份。

TCP,SSL以及HTTPS的连接建立过程详解

TCP,SSL以及HTTPS的连接建立过程详解

服务端收到SSL的hello报文后,会发送server hello报文进行响应,报文段中包含选中的加密算法和TSL版本,同时也包括随机生成的第二随机数

TCP,SSL以及HTTPS的连接建立过程详解
证书验证阶段(使用非对称加密):
3. 接着服务器会再依次发送两个报文给客户端,第一个报文中包含了服务端证书的相关信息,第二个报文中包含公钥信息;如果服务器也需要客户端的证书则会在第二个报文中声明,比如在登录网上银行的场景中则有这个需求
这样客户端浏览器就可以根据自己的证书列表来确认这个服务器是否可信


TCP,SSL以及HTTPS的连接建立过程详解

TCP,SSL以及HTTPS的连接建立过程详解

TCP,SSL以及HTTPS的连接建立过程详解

建立会话密钥阶段(为使用对称加密传输数据做做铺垫):

6.客户端发送client key exchange报文给服务端,报文中包含随机生成的第三个随机数,也称为预主密钥,在装入报文之前,会用公钥加密;同时客户端也会利用第一,第二和第三随机数生成会话密钥。

TCP,SSL以及HTTPS的连接建立过程详解
服务端收到客户端的报文后,会使用私钥进行解密,这样就得到了预主密钥,而且只有客户端和服务端知道这个预主密钥,没有其他人知道(因为预主密钥一旦被公钥加密,只能由私钥加密,反之同理,所以除非私钥泄露了,否则没有人会知道预主密钥)。
得到预主密钥后,服务端会使用第一随机数,第二随机数和预主密钥也生成一个会话密钥,这个会话密钥和客户端生成的会话密钥是一样的
至此TSL连接建立完成,可以开始传输数据,并且使用同一个私钥密钥来加解密(也称为对称加密)。
3.3 建立HTTPS连接
浏览器和服务端只需要根据响应的HTTP连接规则(包括长连接还是短连接,流水线和非流水线连接)实现数据的加密传输




客户端发送ClientHello:在TLS握手的开始,客户端发送一个ClientHello消息,包括它所支持的协议版本、加密套件等。

服务器响应ServerHello:服务器响应ServerHello消息,选择一个客户端也支持的协议版本和加密套件,并发送自己的SSL证书。

客户端验证证书:

客户端生成预主密钥:客户端生成一个预主密钥并使用服务器证书中的公钥加密它,然后发送给服务器。

双方生成会话密钥:客户端和服务器都使用这个预主密钥以及在之前的握手过程中交换的信息来生成会话密钥。

客户端发送Finished消息:客户端使用上一步生成的会话密钥加密一个Finished消息并发送给服务器。

服务器响应Finished消息:服务器解密客户端的消息,验证其内容,然后使用会话密钥加密另一个Finished消息并发送给客户端。

加密的会话开始:此时,客户端和服务器已经成功地交换和验证了证书,双方开始加密的会话。

在这整个过程中,证书的验证确保客户端与其预期的服务器进行通信,而不是中间人。这为客户端和服务器之间的通信提供了身份验证和数据加密。

受信任的CA列表:如前所述,客户端(例如浏览器或操作系统)内置有一个受信任的CA列表。只有在这个列表中的CA签发的证书会被默认信任。这个列表的维护是非常严格的,只有经过深入审核的CA才会被加入。

合法但不受信任的证书:一个证书可能是完全合法的(比如它是有效的、未过期的、并且正确地签名的),但如果它不是由客户端已知的受信任的CA签发的,客户端还是不会信任它。在这种情况下,当用户试图访问使用这样证书的网站时,浏览器通常会显示一个警告,告诉用户这个证书不能被信任。

手动导入证书:尽管默认情况下浏览器或其他客户端可能不信任某个证书,但用户通常有选项手动导入并信任这个证书。这在开发或测试环境中是很常见的,因为开发者可能使用自签名证书而不是由公认CA签发的证书。

私有CA或企业CA:在某些企业或组织环境中,可能存在私有的或企业级的CA,这些CA签发的证书仅在这个组织或企业内部受信任。为了确保员工或内部用户的设备信任这些证书,企业IT部门可能会将这些私有CA的根证书部署到组织内的所有设备上。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/114520.html

(0)
上一篇 2025-12-08 16:10
下一篇 2025-12-08 16:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信