参考资料:
[1]. 全面了解http与https的本质区别(技术人员必备)
[2]. SSL/TLS协议运行机制的概述
[3]. HTTPS详解
http+加密+身份认证+完整性=HTTPS
http+SSL = https
加密:SSL
身份认证:证书
完整性:数字签名
HTTPS与SSL
HTTPS established an encrypted link between the browser and the web server using the Secure Socket Layer (SSL) or Transport Layer Security (TLS) protocols. TLS is the new version of SSL.
HTTPS使用SSL和TLS加密,TLS是SSL的一个版本,SSL是基于TCP的,所以SSL前后要进行TCP的握手和挥手。

http vs https

对称加密
在对称加密中加密和解密都只有一个密钥,

常用的对称加密算法包括AES-128, AES-192 and AES-256。
非对称加密
非对称加密也叫公钥加密技术使用数学上相关的密钥对加密和解密数据。密钥对,一个是公开给要进行通讯的机器,另外一个是自己保密的。
数据先用私钥加密,解密需要跟私钥相关的公钥。

非对称加密技术包括EIGamal, RSA, DSA, Elliptic curve techniques and PKCS。
一对密钥只能解决一个方向的通讯,且由接收方产生,比如A要向B发送数据,A首先向B发起请求,然后B产生一对密钥,将公钥发送给A,A将信息用公钥加密后发送给B,B收到后用密钥加密,得到解密后的信息。如果用私钥加密,传递数据,那么公钥持有者们都可以进行解密。
这个过程中密钥是秘密,要想发送的信息不被破解,那么解密的一方必须用密钥,所以B要使用密钥,所以A要使用公钥进行加密,且是B给发的公钥。
-
非对称加密用于数字签名
可以看到跟上面加密不同,数字签名的时候是先用私钥进行加密,再用公钥进行解密,能证明“私钥拥有者” 的唯一身份,用于签名。而用于传输的时候,公钥加密私钥解密,确保发送的信息,只有有“私钥拥有者” 能够解密,
对称加密和非对称加密的区别
对称加密使用相同的密钥,加密速度快;
非对称加密保留了私钥,比较安全;
所以一般的做法是:对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通。SSL就是这样做的。
Secure Socket Layer (SSL)
风险
窃听风险(eavesdropping):第三方可以获知通信内容。
篡改风险(tampering):第三方可以修改通信内容。
冒充风险(pretending):第三方可以冒充他人身份参与通信。
SSL/TLS协议是为了解决这三大风险而设计的,希望达到:
所有信息都是加密传播,第三方无法窃听。
具有校验机制,一旦被篡改,通信双方会立刻发现。
配备身份证书,防止身份被冒充。
SSL在两个主机之间建立加密链接。
HTTP主要是建立在SSL之上,SSL使用SSL证书,也成为电子证书来建立加密链接。
SSL握手
SSL使用非对称加密发起通讯,也叫做SSL握手。这个阶段认证了web服务器,获取公钥,建立连接。

握手步骤
- 客户端发送“client hello”,还有SSL版本号,密码设置,会话设置,随机数字A等等。
- 服务器发送“server hello”,还有SSL版本号,密码设置,带公钥的SSL证书,随机数字B等等。
- 客户端从认证机构那检查证书,认证服务器,通过才往下继续。
- 客户端创建随机数字C,用公钥进行加密,然后发给服务器。如果服务器需要客户端发送SSL证书(通常发生在服务器之间的通讯),客户端也会发。
- 客户端和服务端会用随机数字ABC生成会话密钥。
- 服务器使用私钥加密了会话密钥,会话密钥加密应答发送给客户端。
- 为什么需要三个随机数字
"不管是客户端还是服务器,都需要随机数,这样生成的密钥才不会每次都一样。由于SSL协议中证书是静态的,因此十分有必要引入一种随机因素来保证协商出来的密钥的随机性。
对于RSA密钥交换算法来说,pre-master-key本身就是一个随机数,再加上hello消息中的随机,三个随机数通过一个密钥导出器最终导出一个对称密钥。
pre master的存在在于SSL协议不信任每个主机都能产生完全随机的随机数,如果随机数不随机,那么pre master secret就有可能被猜出来,那么仅适用pre master secret作为密钥就不合适了,因此必须引入新的随机因素,那么客户端和服务器加上pre master secret三个随机数一同生成的密钥就不容易被猜出了,一个伪随机可能完全不随机,可是是三个伪随机就十分接近随机了,每增加一个自由度,随机性增加的可不是一。"
-
如果握手阶段有人窃听
唯一漏听的是随机数字C,因为C用非对称加密进行了加密。 -
如何保证公钥不被篡改?
公钥放在数字证书里面,数字证书采用了数字签名,只有含有非对称加密的私钥才可以篡改放在数字证书里面的公钥。 -
证书被黑客利用
没有用,因为其他黑客没有证书公钥对应的密钥,所以就是用户和黑客用网站的证书在通信,黑客也无法破解用户的内容,因为没有密钥。
数据传输
数据传输的过程使用的是对称加密,密钥使用的是上面的会话密钥。
SSL证书
认证机构在判明申请者的身份之后,对已申请的公钥做数字签名(非对称加密使用私钥进行加密叫数字签名)。网站发送证书(包括握手的公钥和证书的数字签名),用户收到后用机构给的公钥(一般现在主流浏览器都是在内部植入了认证机构的公钥)对证书进行计算看两个数字签名是否一样。

SSL抓包
下面这个过程抓包工具可以继续的前提是,抓包工具的证书可被信任。
既然Https那么安全,那为什么用抓包工具还是可以看到里面的数据。这里需要对抓包过程的原理做一个简单的介绍,抓包,其实就是中间人攻击,在网络请求过程中,抓包工具充当着客户端/服务端的角色,当客户端请求数据时,抓包工具将请求进行拦截,然后构造数据(冒充客户端)向服务端发起请求,此时服务端会返回自己的公钥证书,然后抓包工具将服务端的公钥证书替换成自己的公钥证书,随后将数据返回可客户端(此时充当服务端的角色)。客户端拿到公钥证书后,使用公钥证书中的公钥对Pre-master secret进行加密,并发送给服务端,发送过程中又被抓包工具拦截,由于客户端使用的公钥其实就是抓包工具生成的证书公钥,所以抓包工具只需要使用自己的私钥进行解密即可拿到真实的Pre-master secret(因为抓包工具在之前的过程中已经拿到了双方的随机码,所以到这一步抓包工具相当于已经拿到了后续通信使用的密钥),随后抓包工具使用从服务端接收到的公钥证书中的公钥对Pre-master secret进行加密,然后发送给服务端。随后的通信过程虽然进行了加密,但抓包工具已经生成了密钥(master secret),所以可以查看Https的通信内容。一图以蔽之:
![]()
HTTPS怎么化解三大风险
-
窃听风险
黑客可以获知通信内容
数据通讯阶段使用了对称加密,没有密钥难以破解通信内容。 -
篡改风险
黑客可以修改通信内容
数字签名,数字签名前面说过,是用非对称加密进行的,发送者对内容使用私钥进行加密,其他人由于没有私钥无法加密,接受者使用公钥进行解密。私钥的唯一保证了发送者的唯一。 -
冒充风险
黑客可以冒充他人身份参与通信
数字证书,权威机构对数字证书用私钥进行了数字签名,所以黑客无法篡改数字证书的内容。
为什么数字签名之后就可以证明是你自己?为什么第三方不能对它进行修改?
数字签名采用的是非对称加密,对方拥有公钥,自己拥有私钥,先私钥再公钥可以进行解密。
由于黑客没有我们的私钥,修改内容后,无法对内容进行加密。
网友评论