HTTPS 建立连接的详细过程

本贴最后更新于 2012 天前,其中的信息可能已经时异事殊

来源:
https://www.cnblogs.com/liyuhui-Z/p/7844880.html
http://www.cnblogs.com/P_Chou/archive/2010/12/27/https-ssl-certification.html

简介

HTTPS 是在 HTTP 的基础上和 ssl/tls 证书结合起来的一种协议,保证了传输过程中的安全性,减少了被恶意劫持的可能.很好的解决了解决了 http 的三个缺点(被监听、被篡改、被伪装)。

https:在 http(超文本传输协议)基础上提出的一种安全的 http 协议,因此可以称为安全的超文本传输协议。http 协议直接放置在 TCP 协议之上,而 https 提出在 http 和 TCP 中间加上一层加密层。从发送端看,这一层负责把 http 的内容加密后送到下层的 TCP,从接收方看,这一层负责将 TCP 送来的数据解密还原成 http 的内容。
SSL(Secure Socket Layer):是 Netscape 公司设计的主要用于 WEB 的安全传输协议。从名字就可以看出它在 https 协议栈中负责实现上面提到的加密层。因此,一个 https 协议栈大致是这样的:

数字证书:一种文件的名称,好比一个机构或人的签名,能够证明这个机构或人的真实性。其中包含的信息,用于实现上述功能。
加密和认证:加密是指通信双方为了防止铭感信息在信道上被第三方窃听而泄漏,将明文通过加密变成密文,如果第三方无法解密的话,就算他获得密文也无能为力;认证是指通信双方为了确认对方是值得信任的消息发送或接受方,而不是使用假身份的骗子,采取的确认身份的方式。只有同时进行了加密和认真才能保证通信的安全,因此在 SSL 通信协议中这两者都被应。

因此,这三者的关系已经十分清楚了:https 依赖一种实现方式,目前通用的是 SSL,数字证书是支持这种安全通信的文件。另外有 SSL 衍生出 TLS 和 WTLS,前者是 IEFT 将 SSL 标准化之后产生的(TSL1.0),与 SSL 差别很小,后者是用于无线环境下的 TSL。
需要注意的是非对称加解密算法的效率要比对称加解密要低的多。所以 SSL 在握手过程中使用非对称密码算法来协商密钥,实际使用对称加解密的方法对 http 内容加密传输。

对称加密和非对称加密

  • 对称加密

    • 即加密的密钥和解密的密钥相同,
  • 非对称加密

    • 非对称加密将密钥分为公钥和私钥,公钥可以公开,私钥需要保密,客户端公钥加密的数据,服务端可以通过私钥来解密

建立连接

  • HTTP 和 HTTPS 都需要在建立连接的基础上来进行数据传输,是基本操作

  • 当客户在浏览器中输入网址的并且按下回车,浏览器会在浏览器 DNS 缓存,本地 DNS 缓存,和 Hosts 中寻找对应的记录,如果没有获取到则会请求 DNS 服务来获取对应的 ip

  • 当获取到 ip 后,tcp 连接会进行三次握手建立连接

tcp 的三次挥手和四次挥手

过程简图

三次挥手(建立连接)

  • 第一次:建立连接时,客户端发送 SYN 包(syn=j)到服务器,并进入 SYN_SEND 状态,等待服务器确认;

  • 第二次:服务器收到 SYN 包,向客户端返回 ACK(ack=j+1),同时自己也发送一个 SYN 包(syn=k),即 SYN+ACK 包,此时服务器进入 SYN_RCVD 状态;

  • 第三次:客户端收到服务器的 SYN+ACK 包,向服务器发送确认包 ACK(ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED 状态,完成三次握手。

  • 完成三次握手,客户端与服务器开始传送数据,也就是 ESTABLISHED 状态。

  • 三次握手保证了不会建立无效的连接,从而浪费资源。

四次挥手(断开连接)

  • 第一次: TCP 客户端发送一个 FIN,用来关闭客户到服务器的数据传送。

  • 第二次:服务器收到这个 FIN,它发回一个 ACK,确认序号为收到的序号加 1。和 SYN 一样,一个 FIN 将占用一个序号。

  • 第三次:服务器关闭客户端的连接,发送一个 FIN 给客户端。

  • 第四次:客户端发回 ACK 报文确认,并将确认序号设置为收到序号加 1。

HTTP 请求过程

  • 建立连接完毕以后客户端会发送响应给服务端

  • 服务端接受请求并且做出响应发送给客户端

  • 客户端收到响应并且解析响应响应给客户

HTTPS

  • 在使用 HTTPS 是需要保证服务端配置正确了对应的安全证书

  • 客户端发送请求到服务端

  • 服务端返回公钥和证书到客户端

  • 客户端接收后会验证证书的安全性,如果通过则会随机生成一个随机数,用公钥对其加密,发送到服务端

  • 服务端接受到这个加密后的随机数后会用私钥对其解密得到真正的随机数,随后用这个随机数当做私钥对需要发送的数据进行对称加密

  • 客户端在接收到加密后的数据使用私钥(即生成的随机值)对数据进行解密并且解析数据呈现结果给客户

  • SSL 加密建立

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...