什么是HTTP协议
HTTP 协议全称是 Hyper Text Transfer Protocol,也就是超文本传输协议,位于 TCP/IP 四层模型中的应用层。
HTTP 协议是通过请求(request)响应(response)的方式,在客户端和服务端建立起通讯的。
由于 HTTP 协议的信息传输完全是以明文方式,不做任何加密,导致 HTTP 协议不够安全。
HTTP 协议是无状态的协议,是通过 cookie 或者 session 来管理会话信息。
什么是HTTPS
HTTPS 就是加强版的 HTTP 协议。在 HTTP 层加入 SSL 层用于安全认证。
HTTPS 主要作用:
- 建立一个安全的信道,保证数据传输的安全性
- 确认网站的真实性质
HTTPS 是如何实现安全认证的
首先我们看看为什么说 HTTP 协议是不安全的:
- 小明是客户端,小红是服务端。一天小明尝试向小红发送请求。
但是由于传送的是明文,这个信息在传输过程中很可能就会被中间人截取被篡改。
- 后来为了防止这样的情况出现,小明小红决定使用对称密钥加密信息,然后同样的使用密钥来解密信息。
这样是不是就是安全了呢?
虽然在后续的通讯中都是传递的密文,但是首次约定密钥的时候还是用的明文传输。如果第一次通讯已经被拦截了,那么中间人知道了密钥,后续的密文,中间人同样可以解密并篡改。
- 然后想到可以使用非对称密钥,为密钥的传输做一层额外的保护。
在第一次建立通讯的时候,小红先把自己的公钥 Key1 发送给小明。
收到小红的公钥以后,小明生成一个对话密钥 Key2,并使用小红的公钥 Key1 来加密,发送给小红。小红接收到信息以后,利用自己的私钥解开 Key1,这样就得到了 Key2 。然后就可以使用 Key2 来加解密信息,进行通讯了。
这样就算中间人在一开始截取了含有 Key2 的密文也没有 key1 对应的密钥,不能解开密文得不到 key2。
但是如果中间人在首次小红把自己公钥告诉小明的时候就截取,并把小红的公钥 key1 换成自己的公钥 key3.而小明不知道其中的公钥已经不是小红的公钥 key1,便用了中间人的 key3 加密 key2。这样中间人就可以解密得到 key2。并使用小红的公钥 key1 加密发送给小红。
这样中间人同样掌握了会话密钥 key2。
- 这个时候我们引入一个第三方,一个权威证书除颁发中心 CA。那么这个证书又是什么呢:
在引入了证书以后的认证流程:
- 作为服务端的小红向证书颁发机构申请证书,把自己的公钥发送给证书颁发机构。
- 证书颁发机构利用自己的私钥来加密小红的公钥 key1。并通过服务器网址等信息生成一个证书签名,童颜证书签名也是用自己的私钥加密。将制作完成的证书发送给小红。
- 当有小明请求与小红通讯的时候不再是将自己的公钥 key1 发送给对方。而是将证书发送给对方。
- 小明收到证书以后,首先就是要验证证书的真实性。各大浏览器和操作系统都维护了所有的权威证书颁发机构的名称和公钥。所以小明只要知道是那个机构证书颁发的证书,就可以获得这个证书机构的公钥,并解密得到小红的公钥 key1 和证书签名。然后按照同样的签名规则生成证书签名,再对比两个证书签名。验证成功后,就可以放心的使用解密出的服务端的公钥加密对话密钥。与服务器建立通讯了。
有了证书,就算中间人,截取了小红发送的证书,换成自己的假证书,也无法通过认证。因为证书签名是由服务端网址等信息生成的,小明就算拿到了假证书证书签名也不能对比成功。
最后的公钥机构就是 HTTPS 解决安全问题的主题思想。HTTPS 在 HTTP 协议的基础上加了一层用于安全认证的 SSL 层。公钥机构认证就是在 SSL 层完成的。