文章目录
-
- 1:什么是https
- 2:使用http协议的问题
-
-
- 2.1:http是明文传输。
- 2.2:http不会验证对方身份。
- 2.3:http无法验证报文的完整性。
-
- 3:密钥的问题
- 4:SSL 四次握手
-
-
- 4.1:第一次握手
- 4.2:第二次握手
- 4.3:第三次握手
- 4.4:第四次握手
-
- 5:SSL 的作用
-
-
- 5.1:通过将通信加密解决http明文传输问题
- 5.2:验证通信方的身份
- 5.3:保证报文完整性,防止被篡改
- 5.4:确保服务端公钥安全到达客户端。
-
- 6:SSL 速度慢
1:什么是https
https并不是应用层的一种新协议。
https协议是指:http协议+加密处理+身份认证+完整性保护(http协议+SSL协议/TLS协议)
通常,http协议会直接和TCP通信,而使用https,则变成了http先和SSL通信,再由SSL和TCP通信。一般,将SSL统称SSL+TLS。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2YfNWawNyZuBnLiJ2M4EGMlRmZ5UTZhhTYhRzY5QTN0cDN3cTMyQTYkJ2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
2:使用http协议的问题
- http协议使用明文传输数据,内容有可能会被窃听。
- http协议不会验证对方身份,可能会遭遇伪装。
- 无法验证报文的完整性,可能会遭遇篡改。
2.1:http是明文传输。
网络环境是错综复杂的,你的信息要经过许多层才能到达目的地,比如光缆,各级路由,代理服务器等,任何一个步骤被劫持都会导致你的信息内容暴露。
你总不想把你的隐私内容数据暴露在公众眼中吧。
2.2:http不会验证对方身份。
由于http不会验证对方身份,攻击者可以伪造你的身份与服务端通信。造成用户的损失。
除此之外,攻击者也可以根据此特性,不断对服务器发起请求占用服务器资源,造成 DOS 攻击。(Denial of Service,拒绝服务攻击)
2.3:http无法验证报文的完整性。
由于http无法验证报文的完整性,可能导致我们的数据被篡改。(中间人攻击)
3:密钥的问题
流行的加密方式:
- 共享密钥(对称密钥:公钥+公钥)
- 公开密钥(非对称密钥:私钥+公钥)
共享密钥:服务端将公钥传给客户端,客户端使用该公钥加密,服务端使用该公钥解密。
公开密钥:将公钥传给客户端,客户端接收到公钥,使用该公钥对数据加密,服务端使用私钥解密。
公开密钥的公钥谁都能获取,但由公钥加密的内容,只有服务端的私钥可以解密。
遗憾的是无论共享密钥还是公开密钥,都存在相应的问题。
共享密钥 存在怎么把密钥安全发送给对方的窘境。因为http协议是明文传输的,密钥由服务端发送给客户端的时候,存在密钥暴露的风险,无法判断从而导致加密失去意义。
公开密钥 无法判断公开的公钥本身是否是货真价实公钥。因为公钥在传输过程中有可能会被篡改。
https使用混合加密方式,因为共享密钥比公开密钥效率要快。在保证公钥能安全到达对方的时候,使用共享密钥,否则使用公开密钥。
4:SSL 四次握手
4.1:第一次握手
- 发送客户端支持的SSL版本及所使用的加密组件(加密算法等信息)。
4.2:第二次握手
- 发送服务端支持的SSL版本及所使用的加密组件(根据客户端发送过来的加密组件筛选得出)
- 发送公开密钥证书。
- 告知客户端已发送完毕。
4.3:第三次握手
- 通过服务端返回的公开密钥计算得出
(包含RSA加密算法,DH密钥交换算法等) 的随机密码串。PreMasterSecret
- 提示服务端接下来的通信使用
密钥加密。PreMasterSecret
- 告知服务端发送完毕,接下来,根据服务端的回复来判断服务端是否可以正常解密。
4.4:第四次握手
- 告知客户端是否可以解密
密钥加密的内容。PreMasterSecret
- 结束握手,SSL连接建立完毕。
接下来,通信的内容将会收到SSL的保护。
我们统称的SSL包含SSL协议与TLS协议。
SSL最初由网景通信公司倡导,开发了SSL3.0之前的版本,之后主导权交给IETF的手中。
后来,IETF在SSL3.0版本的基础上制定了TLS协议。所以我们通常统一称之为SSL。
5:SSL 的作用
5.1:通过将通信加密解决http明文传输问题
注意:这里的加密指的是将报文主体(内容)加密,报文首部(通用首部,自定义首部,请求行等)并不会加密。
5.2:验证通信方的身份
通过验证对方证书来判断对方身份。
证书是由值得信赖的第三方机构颁发。
因此要产生一定额外的费用交给颁发证书的第三方机构。
5.3:保证报文完整性,防止被篡改
通过加密及身份验证。
5.4:确保服务端公钥安全到达客户端。
首先,我们需要向第三方CA机构申请一张证书。
证书中包含了我们的名称,公钥等信息。
此外,浏览器或操作系统会内置一些可靠的第三方机构的公钥。
CA机构使用自己的私钥(不公开)对证书数据进行加密,生成签名:abcdefg
浏览器使用内置的公钥解密证书的签名,如果解密出来的信息与证书信息明文相同,则证明证书没有被篡改。
需要注意的是,CA机构生成的证书签名,是根据机构自己私钥生成的,在没有使用正确的私钥生成的签名,就会出现浏览器公钥解密签名解析出来的明文与实际明文不同的问题,然后浏览器就可以提醒用户。
可以看出,浏览器厂商的角色也很重要,前提也需要你信任浏览器厂商。
6:SSL 速度慢
SSL 虽然能保证通信的安全,但对服务器的内存和流量的消耗都会增大。
对于非敏感的信息,我们可以依旧使用 http 协议。
涉及个人信息等隐私以及重要数据的时候可以选择 https。
SSL 不仅可以用于http协议,其他应用层像 SMTP 和 Telnet 等协议均可配合 SSL协议使用。