先来一张图
本文不打算长篇大论去讲解各种HTTPS相关的理论知识,只是综合网上各位大佬们的HTTPS详解,作一个简短的要点总结。水平有限,如有疏漏之处欢迎指正。
什么是HTTPS?
HTTPS = HTTP + SSL/TSL,是HTTP协议的安全版。
SSL/TSL又是什么?
SSL的全称是Secure Sockets Layer,即安全套接层协议,是为网络通信提供安全及数据完整性的一种安全协议。SSL最新的版本是3.0。
TLS的全称是Transport Layer Security,即安全传输层协议,是建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。
SSL/TSL = 非对称加密(如RSA、ECC) + 对称加密(如AES、DES) + 散列算法(如MD5
为什么要用HTTPS?
因为HTTP在“裸奔”(明文传输,不安全)。
对数据进行加密,并建立一个信息安全通道,来保证传输过程中的数据安全
对网站服务器进行真实身份认证
图解文字说明
①:一般【客户端】首先发起请求,例如请求网站www.thinktxt.com/, 生成一个随机数(RandomC),携带支持的TSL版本、加密算法等信息发送至【服务端】。
②:【服务端】收到请求,返回证书、一个随机数(RandomS)、协商加密算法。
③:【客户端】拿到证书后开始进行校验,验证其合法性。客户端通过本地浏览器或操作系统内置的权威第三方认证机构的CA证书进行验证,一个证书包含域名、证书编号、公钥、有效期等信息,证书编号是在服务器管理员通过第三方证书机构申请证书的时候,第三方机构用他们的私钥对证书编号进行加密存入证书,根据编号生成方法生成证书编号(证书本身携带了生成证书编号的方法),与CA证书公钥解密得出的证书编号进行对比,验证不通过或者证书过期等情况就提示存在风险(浏览器的红色警告),验证通过则进行下一步。
④:【客户端】生成一个随机数(PreMaster Key),此时已经有第三个随机数了,根据三个随机数(RandomC、RandomS、PreMaster Key)按照双方约定的算法生成用于后面会话的同一把的“会话密钥”。
⑤:【客户端】将随机数(PreMaster Key)通过公钥加密后发送至【服务端】。
⑥:【服务端】收到密文后用私钥进行解密,得到随机数(PreMaster Key),此时服务端也拥有了三个随机数,根据三个随机数按照事先约定的加密算法生成用于后面会话的同一把的“会话密钥”。
⑦:【服务端】计算此前所有内容的握手消息hash值,并用“会话密钥”加密后发送至客户端用于验证。
⑧:【客户端】解密并计算握手消息的hash值,如果与服务端发来的hash一致,此时握手过程结束。
⑨:验证通过后,开始正常的加密通信。
以上就是HTTPS的原理解析,希望能够对大家有所帮助!
文章转载至掘金作者txBoy