HTTPS的原理
HTTPS的原理
1 https 与 http的区别
https 就是在安全的传输层上发送的http。https 将http报文发送给TCP 之前,先将其发送给了一个安全层(SSL/TLS),由安全层对其进行加密 (ISO模型结构参考图-1)。
如果客户端浏览器发现请求的URL是以 https开头, 浏览器就会打开一条到服务器端口 443(默认端口)的TCP连接,连接建立好之后会与服务器做SSL握手来初始化SSL层的参数。
等到SSL参数初始化完成之后 客户端才可以将请求报文发送给安全层。然后在安全层SSL上将已加密的报文通过TCP发送给服务器。
(图-1)
2 https的原理
2.1 公开秘钥加密
与对称秘钥加密算法使用相同的加密秘钥和解密秘钥不同,公开秘钥加密算法使用的加密秘钥和解密秘钥是不一样的。它使用两个非对称秘钥,一个用来对主机报文编码,另一个用来对主机报文
解码。这样可以把编码秘钥公布出去让所有相互通信的访问者都知道,而在服务器端使用只有自己才知道的私有秘钥用来解密。(反过来私钥加密公钥也能解密)非对称秘钥加密需要确保在知道以下
①:公开秘钥
②:获取了小片的拦截的密文
③:已知报文明文和相关的密文
的情况下依然无法知道私有秘钥。RSA算法就是满足条件的非对称加密算法。(对称秘钥加密与非对称秘钥加密对比如图-2)
(图 - 2)
2.2 数字签名
使用数字签名是为了可以在报文接收端知道报文有没有被篡改过,数字签名是附加在报文上的特殊加密校验码,数字签名的生成和校验如下
发送端通过 ①:将边长报文提出为一个定长的摘要
②: 使用私钥为参数对定长摘要做加密, 计算出签名
③:将计算出的签名附加在报文的末尾, 一并发送出去
接收端通过 ①:使用公开秘钥对签名做解密获取报文的摘要
②:在本地计算明文报文的摘要
③:拿解密获取的报文的摘要和本地计算得到的报文摘要做比较,若相同则表示报文未被篡改过
这种数字签名方式虽然看似安全,但是黑客仍然可以通过某种途径拿到客户端的设备,把本地的公钥修改为自己的私钥对应的公钥,这样黑客下次便可以冒充服务端与客户端正常通信而不被察觉。
考虑到这种攻击方式的存在。服务端可以使用三方的数字证书来证明自己的身份。
(图 - 3)
2.3 数字证书
数字签名存在的安全隐患主要表现在,客户端使用的公钥是否是真实可靠的公钥这一点上。如果存在一个第三方的认证中心(certificate authority,CA)能够告诉客户端这些,事情就好办了。
浏览器可以自动获取所连接服务器的数字证书。一般web服务器证书包括以下信息
①web站点的名称和主机名
②web站点的公开秘钥
③证书颁发机构的名称
④来自证书颁发机构的签名
获取到该证书后,浏览器先是看证书的颁发机构在本地是否已经保存有该机构的公钥,如果已经存在公钥则 使用本地的公钥对证书末尾的签名做解密,并对证书明文提取摘要,判断
解密后的摘要和本地提取的摘要是否一致。若一致则表示该证书是有效的,这时证书上的域名地址以及公钥都可视为可用,客户端可以使用证书上的公钥来与服务器通信。(如图-4)
(图 - 4)
如果客户端浏览器发现证书颁发机构是本地没有的,这时浏览器会警告用户 这张数字证书不是由受信任的机构颁发的,并给出是否信任并继续的弹窗。继续的话意味着需要再不做签名认证的情况下
信任证书中的公钥和服务器域名地址。
现在使用的数字证书大多遵循 X.509 v3标准,该标准要求数字证书具有以下格式
2.4 SSL 协议
简化版的SSL握手的过程如下:
①客户端向服务器发起请求:以明文向服务器发送包括版本信息,加密套件候选列表,压缩算法候选列表,随机数random_C等信息
②服务端向客户端返回协商结果: 包括使用的协议版本,选择的加密套件cipher_suite,选择的压缩算法compression_method以及随机数random_S等以及服务器证书
③客户端接收到后先是会做证书的有效性校验,校验通过后客户端计算产生随机数Pre_master , 并使用服务器证书上的公钥对Pre_master加密 然后发送给服务器
④这时客户端和服务器均已获得计算协商秘钥(对称秘钥)的所有信息 = random_C + random_S + Pre_master,服务器和客户端均可以通过计算协商秘钥的方法各自在本地
计算出协商秘钥。
⑤客户端通知服务器后续的通信采用协商秘钥做加密通信。
⑥客户端结合之前所有通信参数的hash值生成一段数据,并采用协商秘钥加密,发送给服务器用户数据的握手验证
⑦服务器使用协商秘钥解密客户端发送过来的握手验证数据,并验证数据和秘钥的正确性
⑧服务器端验证通过后,服务器同样的发送类似⑤⑥中的数据给客户端,以此告知客户端也使用协商秘钥加密
⑨握手结束,之后使用对称加密通信
参考:
http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html
https://blog.csdn.net/junehappylove/article/details/52288796