网络协议-HTTPS协议

HTTPS 协议

HTTPS协议用于更严肃的场景,例如金钱交易。如果你在网上购物还用的是HTTP协议就有风险了,黑客很可能截获你的HTTP报文,然后伪造成商家骗取你的财富。解决这个问题的思路是加密。加密分为两种,一种是对称加密,一种是非对称加密。

对称加密中,加密和解密的密钥是相同的。非对称加密中,加密和解密使用的密钥是不同的,一把作为公开的公钥,另一把是谁也不能给的私钥。

对称加密

在网络上通信中,假如客户端和服务端都有对称密钥,客户端的密钥将信息加密发送出去,服务端接到消息用同样的密钥解密信息。服务端发送消息也是一样,信息经密钥加密后发送出去,客户端用同样的密钥解密。在网络中任何人截获数据包没有密钥也无法打开。

关键的问题在于,如何让客户端和服务端同样的对称密钥。这个问题用下面的非对称加密来解决。

非对称加密

私钥留给自己,公钥留给别人,我发的消息,有公钥的人都能看见,有公钥的人发的消息只有我能看见。但我只想给你看怎么办?

1、我用私钥加密信息,将消息和公钥发出去,你接到后,用我的公钥加密你要发的消息,消息中包含你的公钥。

2、我接到消息,且这个消息只能我接到,我将你的公钥拿出来,加密我想要给你发的消息。

3、我将这个消息发送出去,这个消息只有你的私钥才能解密。这样咱俩就能私密通信了。

但这里有个问题,就是如果有人冒充你,我是不知道的。这个问题由权威机构颁布的数字证书解决。

数字证书

谁都可以生成私钥和公钥,将公钥发出去,来冒充商家骗取钱财。这时候如果有个像政府部门的机构来发个身份证就好了。数字证书就是互联网上的权威机构发行的身份证。

数字证书里有:公钥、证书所有者、发布机构、有效期。

这个数字证书的颁发机构我们称为 CA(Certificate Authority)。具体操作是用命令发起一个证书请求,然后权威机构会给这个证书卡一个章,我们称为签名算法。

签名的算法大致是这样的:将信息用hash算法计算出hash 值,这个过程不可逆。将这个Hash值用CA的私钥加密后和信息一起发出去。

权威机构又是怎么证明自己的呢?怎样防止别人冒充它的?

这还要靠非对称加密,权威机构用自己的私钥给网站的公钥加密,就相当于给网站做了证书。当客户与网站交易时,会获取网站的证书,只要得到权威机构CA 的公钥,就可以解密网站的证书签名,如果解密成功,里面的hash等信息能对得上,就说明这个网站的公钥没问题。

 

HTTPS 的工作模式

由于对称加密的效率要比非对称加密的高很多,当我们用非对称加密的密钥建立好信任之后,就可以用对称加密的密钥来通信了。HTTPS 协议就是这个思路。

双方建立的过程按客户端和服务端模拟,具体过程如下:

1、首先客户端给服务端发送 Client Hello 消息,并将自己支持的加密算法,以及一个随机数给服务端。

2、服务端收到消息后,选择一个加密算法,并附上自己的证书和随机数,给客户端。

3、客户端收到消息后,验证服务端的证书,拿出证书的公钥验证签名和hash,如果可信就像服务端发送一个 pre-master-key 的随机数,该随机数使用证书的公钥加密,发送给服务端。客户端将自己的随机数 + 对方的随机数 + pre-master-key生成对称密钥。

4、服务端接到消息后,用私钥解密,将自己的随机数 + 对方的随机数 + pre-master-key生成对称密钥。

两边都有对称密钥之后,就可以相互通信了。

 

原文地址:https://www.cnblogs.com/mingjie-c/p/11808728.html