数字证书及数字签名的作用

366 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情


数字证书

在服务端和客户端进行通信的时候,虽然黑客无法监听我们所发的报文,但是黑客仍然可以截获。比如,当服务端向客户端发发送自己的公钥的时候,黑客进行截获,然后伪装成服务端将自己的公钥发送给客户端,这时客户端是无法识别服务端的身份的。数字证书的目的就是帮助客户端验证服务端的身份的。

数字证书的创建过程:

  1. 服务端A将自己的信息和公钥发送给CA机构
  2. CA机构需要确认服务端A所发送的信息都是无误的,而不是B冒充A去认证的
  3. 如果确定无误的话,CA机构会将证书内容包括,公钥,地址和服务端的信息等,进行hash算法求值,这会得到一个固定长度的字符串,这个字符串也就是数字签名。不同的内容会生成不同的字符串。CA机构会使用自己的私钥来对证书内容+数字签名进行加密。
  4. 服务端会将加密好的数字证书发给客户端,客户端会利用CA机构的公钥(公钥内置在浏览器中的),对证书和签名进行解密,解密后就可以获得到服务端的信息,并且是可以信任的。为什么可以信任?因为在申请证书时,机构会进行验证的,张三申请证书必须是张三的信息,而不能张三去申请李四的证书。所以说黑客是无法伪造《整个》证书的。从而就可以确定服务端的身份了。证书是无法伪造了,但是可以只修改证书的一点点内容,比如只修改证书里边存的公钥。这就需要另一个概念了:数字签名。

数字签名

数字签名验证信息的完整性,这个完整性包括了是否被修改过,是否被删除过等。原理就是CA机构会通过一个hash算法将证书计算出一个长度固定的字符串,CA机构会使用自己的私钥来对证书内容+数字签名进行加密,这样,黑客由于得不到CA机构的私钥,就无法对数字签名进行替换,也就是,想要修改证书的内容,然后利用hash算法对证书在进行一次hash求值。黑客无法对修改后的信息进行私钥加密,服务端需要用公钥解密。所以就杜绝了替换数字签名的隐患。

客户端在收到加密后的证书后,会进行使用CA机构的公钥进行解密(这时的证书是数字签名和原文的信息),然后使用同样的hash算法对原文进行hash求值,并且与数字签名进行比较,如果相同没有被篡改,如果不相同就被篡改了。