数字证书和数字签名

 

数字签名

服务器首先使用RSA算法生成私钥-公钥对,并只公开公钥。

客户端拿到公钥就可以安全地与服务器通信了。

举个例子,服务器发送的内容是abc,则有:

content=abc

hash值=hash(content)

数字签名=私钥加密hash值

 

客户端验证签名过程:

1. 公钥解密数字签名得到hash值
2. 实际hash值=hash(content)

 

结果:

公钥解密出错,有两种情况:一是解密用的公钥是错的;二是数字签名是错的;

比较签名中的hash值与实际hash值,如果相等说明内容没有被修改过,验签成功;如果不相等说明内容被修改过。

 

数字证书

在客户端验证签名过程中使用的公钥不能保证一定是真的,比如文件损坏,或者其他人替换掉了,都会造成公钥不正确,加以利用后甚至被欺骗。所以服务器的公钥需要一个权威机构认证,就是certificate authority(简称CA),客户端只认CA发布的证书,这样就能保证公钥的正确性。

数字证书=CA私钥加密(服务器的公钥+相关信息)

客户端用CA的公钥(一般都会安装)解密数字证书,得到服务器公钥+相关信息,客户端以本地的证书为基础,判断这个公钥是否通过认证。

例如,客户端如果是浏览器,在浏览器的"证书管理器"有"受信任的根证书颁发机构"列表,浏览器会根据这张列表,查看公钥是否在列表之内,或者判断是否在“证书信任链”中。

 

posted on 2014-10-15 10:05  黄亚平  阅读(291)  评论(0编辑  收藏  举报

导航