在不考虑握手的情况下进行通信,保证安全性,不可更改,防抵赖
A发送消息给B过程详解A写了消息想发给B,A首先写出这个消息hello,world,然后将这个消息进行hash得到摘要,最后加上自己的证书,加上经过签名后的摘要。其形状如下所示
| 1 | 2 | 3 |
|---|---|---|
| 消息 | A的证书 | 签名后的消息摘要 |
然后A生成一个随机对称密钥,将这个密钥对以上消息进行加密,然后将该密钥使用B的公钥进行加密附加到消息的前面,其形状如下所示
| 1 | 2 | 3 | 4 |
|---|---|---|---|
| B公钥加密后的对称密钥 | 对称密钥加密后的消息 | 对称密钥加密后的A的证书 | 对称密钥加密后的签名后的消息摘要 |
B收到消息后,先使用私钥对1部分进行解密,得到对称密钥,然后使用对称密钥对2,3,4进行解密,
| 1 | 2 | 3 | 4 |
|---|---|---|---|
| 对称密钥 | 消息 | A的证书 | 签名后的消息摘要 |
解密后通过证书来验证A是A,怎么通过证书验证A是A呢,要从这个证书是如何生成的说起,证书其实就两个东西,一个东西是A的个人信息,以明文信息显示,包括签发机构(xxCA),申请者(xx),域名(www.xx.com),有效时间(2021/9/1-2021/10/2)公钥(MIICjDCCAfUCFFieOsypxxI3+4T5jR7XFpZ9lrfUAMIGE...)等等还有一个东西,是使用签发机构的私钥进行签名摘要信息。B先用签发机构的公钥对签名摘要信息进行解密,得到的Hash值与直接计算明文信息hash的摘要进行对比,如果一样,证明了两件事,第一,这个证书是经过xxCA认证的,是可信的,因为是通过xxCA公钥解密的。第二,证书里面的明文信息没有被修改,因为两个hash值是一样的。然后再对查看证书的有效期和对应的域名是否准确,都正确后通过验证,证明了这个消息的确是A发送过来的。之后使用证书里面的公钥对4部分进行解密得到消息的Hash值与消息本身Hash得到的摘要进行对比,如果一样,证明了这个消息的确是A发过来的,并且消息本身没有在中途被修改。



