最近一直也在面试的过程中, 可能由于各个方面的问题, 导致没有时间抽出更新博客, 今天开始陆续更新!!! 以后自己的博客, 会向 React Native,swift , 以及 H5 延展, 成为一个全栈的技术人员. 本篇将讲述 HTTP 与 HTTPS 的主要区别以及 HTTPS 里面到底如何操作的, 大约需要 15-20 分钟左右.
一, HTTP
HTTP: 超文本传输协议 (HyperText Transfer Protocol) 是一种用于分布式, 协作式的应用层协议. 最初的 HTTP 用于提供一种发布和接收 html 页面的方法, 是一种明文传输, 端口是 80.
二, HTTPS 与 HTTP 的区别
1. HTTP 的 URL 以 http://"开始, 并且默认端口号为 80; 而 HTTPS 的 URL 以"https://" 开始, 并且默认端口为 443.
2. HTTP 协议运行在 TCP 之上, 所有的传输内容都是明文, 客户端和服务端都不需要对方的身份; HTTPS 是运行在 SSL/TLS 之上的 HTTP, 所有的传输内容都会经过加密, 加密采用的是对称加密, 但对称加密的密钥用服务器方的证书进行了非对称加密.
1)对称加密: 密钥是只有一个, 加密解密也为同一个密码, 并且加解密速度快, 我们使用典型的对称加密算法有 DES,AES 等;
2)非对称加密: 首先密钥是成对出现(公钥无法推算出私钥, 私钥也无法推出公钥), 加密解密使用不同的密钥(公钥加密需要私钥解密, 私钥加密需要公钥解密), 相对对称加密而言速度较慢, 我们使用典型的非对称加密算法有 RSA,DSA 等
三, HTTPS
1. 为什么 HTTPS 采用混合加密机制?
为什么不单独采取非对称加密? 因为非对称加密要比对称加密的方式更复杂, 所以应该充分利用两者的优势. 用非对称的方式来安全传输对称加密的密钥, 而建立通信交换报文阶段就使用对称加密的方式.
2.HTTPS 验证流程
(1)客户端发起 HTTPS 的请求, 把自身支持的 SSL 的指定版本, 通过加密算法发送服务端;
(2)服务端收到后会与自身支持的做对比, 如果不支持则连接就会断开, 反之则会从中选中一种加密算法和哈希算法以证书的形式返回客户端, 证书中就包含了公钥, 颁发机构, 失效日期和网址等等;
(3)客户端收到服务器响应后做以下的几件事:
验证证书合法性
颁发证书的机构是否过期和合法, 以及网址是否与正在访问地址一致等, 证书验证通过后, 浏览器地址栏中会加上小锁
生成随机密码
如果证书通过验证 (或者用户接受了不授信的证书) 这时浏览器会生成一串随机数, 然后用证书中的公钥进行加密.
Hash 握手信息
用最开始约定的 Hash 方式, 把握手消息进行取 Hash 值, 然后通过随机数加密 "握手消息 + 握手消息 Hash 值(签名)", 最后一起发送给服务器
(4)服务器得到客户端传来的密文, 用自己的私钥来解密握手信息取出随机数密码, 然后再用随机数密码来解密握手消息与 Hash 值, 并与传过来的 Hash 值进行对比确认是否一致. 然后用随机密码加密一段握手消息发给客户端.
(5)客户端用随机数解密并且计算握手消息的 Hash, 如果与服务器发来的 Hash 一致, 此时握手的过程就会结束. 之后所有的通信数据都会由于先前的浏览器生成的随机密码并用对称加密算法进行加密(因为密码只有客户端和服务端知道, 即使被拦截也是没有办法解密数据的, 保证了通信的安全)
四, HTTPS 总结
HTTPS 要通信过程得到安全保证, 必须使用对称加密算法, 但是协商对称加密加密算法时, 需要采用非对称加密算法来保证安全, 然后直接使用非对称加密的过程本身也不是很安全, 因为可能会有中间人篡改公钥的可能性, 所以客户端和服务器不直接使用公钥, 采取的是数字证书签发机构颁发的证书来保证非对称加密过程的安全. 从而保证了通信的安全问题.
来源: https://www.cnblogs.com/guohai-stronger/p/9939415.html