HTTPS最全详解

2019-12-30  本文已影响0人  楼上那只猫

HTTP
基于TCP协议
缺点

  1. 明文传输
  2. 无法验证内容完整性,信息有可能被篡改
  3. 无法验证对方身份

为了解决这些问题,可以使用HTTPS
HTTPS基于TSL/SSL协议

对于缺点1,可以在传输过程中对信息加密,如双方约定一个加密密码‘abc’,
对发送的信息用‘abc’加密。
但有个问题,如果约定这个加密密码,如果还是通过http协议去发送这个密码,就还是存在被截获的风险。

为此,可以采用两个密钥进行加密和解密,私钥用来解密,公钥用来加密。
比如a,b两人,a的两个密钥为a-s(私钥),a-p(公钥)。b的为b-s和b-p。

a在发送信息的时候用b-p加密,b收到a发的信息后用b-s解密。
b在发送信息的时候用a-p加密,a收到b发的信息后用a-s解密 。

a-s和b-s都放在各自本地,不需要传输。
那么问题来了,需要把各自的公钥发送给对方,这时就存在公钥被截获的风险。

如果黑客把公钥换成自己的公钥,获取信息后用自己的私钥解密,解密后对信息进行篡改,然后用自己公钥加密后再发送,就会造成隐患。

为了解决公钥的安全性问题,可以使用数字证书。

所谓数字证书,是指从CA处获取的一种证书。

现在假设有A,B要通信,A为客户端,B为服务端,通信初始阶段,A向B发起连接请求,B会把公钥放在证书里发送给A。

这个证书就是CA颁发的证书,通常包含以下内容。

1. 证书包含了颁发证书的机构的名字 -- CA
2. 证书内容本身的数字签名(用CA私钥加密)
3. 证书持有者的公钥
4. 证书签名用到的hash算法

这个给A的数字证书,是经过数字签名的(用的CA的私钥),目的是为了防止证书被篡改。

数字签名由来

对证书内容本身进行hash,得到证书的摘要,然后用CA私钥对摘要进行加密,得到的就是俗称的“数字签名”。

A在收到证书后,用CA的公钥去解密,得到证书的摘要a,因为证书本身包含生成摘要使用的hash算法,此时A再用同样的hash算法对证书生成摘要b,如果a和b相同,则证明证书未被篡改。

证书的真实性验证后,则能从证书中获取B的公钥,此时A生成一个随机的密钥,用B的公钥加密后发送给B,B拿到后用自己的私钥解密,得到这个密钥,注意,这个密钥就是之后A和B通信时加密信息用到的密钥,也就是说,https可以在交换传输密钥时候用非对称加密,在获取密钥后,使用对称加密传输信息,保证速度和安全。

上一篇下一篇

猜你喜欢

热点阅读