HTTP和HTTPS
一、基本定义
1、HTTP协议定义
超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。
2、HTTPS协议定义
HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL

对比之下可以得出,HTTPS相比HTTP,关键在于SSL的使用。
3、SSL协议
SSL(Secure Sockets Layer 安全套接字协议),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密。
4、数字证书
数字证书是指在互联网通讯中标志通讯各方身份信息的一个数字认证,人们可以在网上用它来识别对方的身份。
数字证书的基本架构是公开密钥PKI,即利用一对密钥实施加密和解密。其中密钥包括私钥和公钥,私钥主要用于签名和解密,由用户自定义,只有用户自己知道;公钥用于签名验证和加密,可被多个用户共享。

5、数字签名
数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。它是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术来实现的,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。数字签名是非对称密钥加密技术与数字摘要技术的应用。
二、SSL过程
1、SSL的简单过程
(1) 客户端向服务器端索要并验证公钥。
(2) 双方协商生成"对话密钥"。
(3) 双方采用"对话密钥"进行加密通信。
2、SSL过程的迷惑
1、 Q:客户端A向服务端B索要公钥,怎么确认公钥是服务器B的?
A:公钥放在数字证书中,数字证书没问题,就是正确的。
2、 Q:服务端B可以确认身份了,客户端A的身份如何确认?
A:服务端B可以向客户端A提出请求,让客户端A提供自己的身份证书。
3、 Q:SSL加密采用的是公钥秘匙加密的方式,为什么不采用对称秘钥的方式?
A:对称秘钥加密和解密用的是同一个秘钥,被截取,容易泄露
4、 Q:SSL加密采用公钥秘匙加密就不会有泄露的可能性了吗?
A:有这种可能性,黑客可以自己造一套自己的公钥秘匙发给服务器,骗取服务器的公钥,
5、 Q:既然公钥秘匙加密和对称秘匙加密都存在泄露的可能性,那https到底采用了什么方式进行加密的呢?
A:采用公钥秘匙加密进行数字证书验证,对称秘钥传递信息
6、 Q:数字证书为什么就可以避免信息泄露呢,这是怎么样的一个过程呢。
A:数字证书组成:证书的发布机构、证书的有效日期、证书的所有者、公匙、指纹和指纹算法、签名算法。最重要的是指纹,指纹就是将整个数字证书利用指纹算法加密的结果,数字签名就是将整个数字证书利用签名算法加密的结果。
过程:存在三方:客户端A、服务端B、数字证书的颁布机构CA,CA机构作用相当于一个派出所,颁布数字证书用的。

7、Q:怎么证明这个过程中,数字证书没有被修改处理过呢?
A:浏览器种内嵌CA机构的公钥,当收到服务器B发送过来的CA证书时,利用公钥和数字签名算法将签名解密之后,利用指纹算法进行加密得到值value,判断value是否等于指纹,如果等于指纹说明证书没有问题。
8、Q:数字签名被伪造了怎么办?
A:如果数字签名被改了,浏览器的公钥就解不开了呀,自然说明证书有问题,如果指纹被改了,那签名就对不起来,证书也有问题。
9、Q:证书没有问题,客户端A和客户端B的之后的工作是啥呢?
A: 客户端A要用自己数据和服务器B公钥加密的东西去服务器B验证。(PS:服务端B,如过要验证浏览器,方式差不多,记得之前办了张农行卡,用的是USB插头,来证明自己)。
三、过程详解
(1) 客户端A通过Client Hello消息将它支持的SSL版本、加密算法、MAC计算等信息发送给服务端B。
(2)服务器B确定本次通信采用的SSL版本和加密套件,并通过ServerHello消息通知给客户端A。如果服务器B允许客户端A在以后的通信中重用本次会话,则服务器B会为本次会话分配会话ID,并通过Server Hello消息发送给客户端A。
(3) 服务器B将携带自己公钥信息的数字证书通过Certificate消息发送给客户端A。
(4) 服务器B发送Server Hello Done消息,通知客户端A版本和加密套件协商结束,开始进行密钥交换。
(5) 客户端A验证服务器B的证书合法后,利用证书中的公钥加密客户端A随机生成的premaster secret,并通过Client Key Exchange消息发送给服务器B。
(6) 客户端A发送Change Cipher Spec消息,通知服务器B后续报文将采用协商好的密钥和加密套件进行加密和MAC计算。
(7) 客户端A计算已交互的握手消息(除Change Cipher Spec消息外所有已交互的消息)的Hash值,利用协商好的密钥和加密套件处理Hash值(计算并添加MAC值、加密等),并通过Finished消息发送给服务器B。服务器B利用同样的方法计算已交互的握手消息的Hash值,并与Finished消息的解密结果比较,如果二者相同,且MAC值验证成功,则证明密钥和加密套件协商成功。
(8) 同样地,服务器B发送Change Cipher Spec消息,通知客户端A后续报文将采用协商好的密钥和加密套件进行加密和MAC计算。
(9)服务器B计算已交互的握手消息的Hash值,利用协商好的密钥和加密套件处理Hash值(计算并添加MAC值、加密等),并通过Finished消息发送给客户端A。客户端A利用同样的方法计算已交互的握手消息的Hash值, 并与Finished消息的解密结果比较,如果二者相同,且MAC值验证成功,则证明密钥和加密套件协商成功。
客户端A接收到服务器B发送的Finished消息后,如果解密成功,则可以判断服务器B是数字证书的拥有者,即服务器B身份验证成功,因为只有拥有私钥的服务器B才能从Client Key Exchange消息中解密得到premaster secret,从而间接地实现了客户端A对服务器B的身份验证。
参考:http://www.ruanyifeng.com/blog/2016/08/http.html
https://blog.csdn.net/qq32933432/article/details/87001425/

浙公网安备 33010602011771号