漫谈 HTTPS

本贴最后更新于 1357 天前,其中的信息可能已经水流花落

1、什么是HTTPS

百度百科如下:

HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,
在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS 在HTTP 的基础下加入SSL 层,
HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 
HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。
它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面。

简而言之:HTTPS = HTTP+ SSL/TLS。由此可见SSL/TLS是HTTPS的核心。通常,HTTP 直接和 TCP 通信。当使用 SSL时,则演变成先和 SSL通信,再由 SSL和 TCP 通信了。所谓 HTTPS,其实就是身披SSL外壳的HTTP。

2、什么是SSL/TLS

百度百科如下:

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)
是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密。

显然SSL\TLS都是用来做加密的,都是加密协议。那么HTTPS是如何来完成加密的?

3、HTTPS是如何加密的

3.1、对称密钥加密

加密算法是公开的,但是密钥是保密的,加密和解密都需要同一把秘钥,通过这种方式确保加密方式的安全性。加密和解密同用一个密钥的方式称为共享密钥加密也叫做对称密钥加密

3.2、对称密钥加密的弊端

这种加密方式的缺点也显而易见,加密时必须将密钥也发给对方。如何才能安全地转交?在互联网上转发密钥时,如果密钥落入攻击者之手,同时也就失去加密的意义。另外还得设法安全地保管接收到的密钥。

3.3、非对称秘钥加密

非对称秘钥加密很好的解决了对称秘钥加密的困难。通过公钥和私钥两把钥匙,公钥可以随意发给任何人,私钥只有服务器自己知道。客户端使用公钥进行加密发送信息,服务端使用私钥解密信息。利用这种方式不需要再传递加密解密的秘钥,也不用担心秘钥被窃取。并且,想使用公钥密文对内容进行解析是非常困难的。

3.4、非对称秘钥加密的弊端

乍看之下非对称秘钥加密似乎没有什么弊端,但对于客户端来说,并不是知道公钥是不是货真价实的。比如我们访问某个网站,服务器发来了公钥,如何证明公钥没有在中间被篡改,如果被替换掉,那么信息可能被窃取。为了解决这个问题。可以使用由数字证书认证机构(CA,Certificate Authority)和其相关机关颁发的公开密钥证书

3.5、公开密钥证书(CA证书)

申请证书:用户向CA机构提交自己的信息公钥,申请通过CA机构生成数字证书,证书中除了信息和公钥还有签名

验证证书:客户端接收到证书之后,通过签名、信息、公钥验证证书是否有效,一旦通过验证,就能证明证书和公钥都是可靠的。

4、HTTPS通信流程

image.png

步骤 1: 客户端通过发送 Client Hello 报文开始 SSL通信。报文中包含客户端支持的 SSL的指定版本、
加密组件(Cipher Suite)列表(所使用的加密算法及密钥长度等)。 
步骤 2: 服务器可进行 SSL通信时,会以 Server Hello 报文作为应答。和客户端一样,在报文中包含 SSL版本以及加密组件。
服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的。 
步骤 3: 之后服务器发送 Certificate 报文。报文中包含公开密钥证书。
步骤 4: 最后服务器发送 Server Hello Done 报文通知客户端,最初阶 段的 SSL握手协商部分结束。 
步骤 5: SSL第一次握手结束之后,客户端以 Client Key Exchange 报 文作为回应。
报文中包含通信加密中使用的一种被称为 Pre-master secret 的随机密码串。该报文已用步骤 3 中的公开密钥进行加密。 
步骤 6: 接着客户端继续发送 Change Cipher Spec 报文。该报文会提示服务器,
在此报文之后的通信会采用 Pre-master secret 密钥加密。 
步骤 7: 客户端发送 Finished 报文。该报文包含连接至今全部报文的 整体校验值。
这次握手协商是否能够成功,要以服务器是否能够正确 解密该报文作为判定标准。 
步骤 8: 服务器同样发送 Change Cipher Spec 报文。 
步骤 9: 服务器同样发送 Finished 报文。 
步骤 10: 服务器和客户端的 Finished 报文交换完毕之后,SSL连接就算建立完成。
当然,通信会受到 SSL的保护。从此处开始进行应用 层协议的通信,即发送 HTTP 请求。 
步骤 11: 应用层协议通信,即发送 HTTP 响应。 
步骤 12: 最后由客户端断开连接。断开连接时,发送 close_notify 报 文。

上面的图片和步骤均来自《图解HTTP》,为了大家更容易理解,把核心内容整理成简短的6个步骤:

1. 客户端发起HTTPS请求
2. 服务端向客户端发送CA证书
3. 客户端验证证书,取出公钥,算出Pre-master secret随机数(对称秘钥)
4. 客户端发送用公钥加密之后的Pre-master secret,并通知服务端之后都采用此随机数加密数据。
5. 服务端用私钥解密Pre-master secret,算出master secret,至此客户端Pre-master secret等于服务端master secret,
双方用此随机数加密解密数据。
6. 加密解密HTTP文本。
  • Java
    59 引用 • 497 回帖
  • 网络
    6 引用 • 4 回帖 • 2 关注
1 操作
luojie 在 2020-08-06 17:37:04 更新了该帖
回帖
请输入回帖内容 ...