下面借用一个通俗易懂的例子解释什么是 "数字签名"(digital signature)和"数字证书"(digital certificate)。

1、甲有两把钥匙,一把是公钥,另一把是私钥。

2、甲把公钥送给他的朋友们----乙、丙----每人一把。

3、乙要给甲写一封保密的信。她写完后用甲的公钥加密,就可以达到保密的效果。

4、甲收信后,用私钥解密,就看到了信件内容。这里要强调的是,只要甲的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。

5、甲给乙回信,决定采用"数字签名":他写完后先用Hash函数,生成信件的摘要(digest)。

6、然后,甲使用私钥,对这个摘要加密,生成"数字签名"(signature)。

7、甲将这个签名,附在信件下面,一起发给乙。

8、乙收信后,取下数字签名,用甲的公钥解密,得到信件的摘要。由此证明,这封信确实是甲发出的。

9、乙再对信件本身使用Hash函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一致,就证明这封信未被修改过。

10、复杂的情况出现了。丙想欺骗乙,他偷偷使用了乙的电脑,用自己的公钥换走了甲的公钥。此时,乙实际拥有的是丙的公钥,但是还以为这是甲的公钥。因此,丙就可以冒充甲,用自己的私钥做成"数字签名",写信给乙,让乙用假的甲公钥进行解密。

11、后来,乙感觉不对劲,发现自己无法确定公钥是否真的属于甲。她想到了一个办法,要求甲去找"证书中心"(certificate authority,简称CA),为公钥做认证。证书中心用自己的私钥,对甲的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)。

12、甲拿到数字证书以后,就可以放心了。以后再给乙写信,只要在签名的同时,再附上数字证书就行了。

13、乙收信后,用CA的公钥解开数字证书,就可以拿到甲真实的公钥了,然后就能证明"数字签名"是否真的是甲签的。

 

 

下面,我们看一个应用"数字证书"的实例,

使用 https 协议,请求一个网页的流程:

  • 首先,客户端向服务器发出加密请求。
  • 服务器用自己的私钥加密网页以后,连同本身的数字证书,一起发送给客户端。
  • 客户端(浏览器)的"证书管理器",有"受信任的根证书颁发机构"列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内。
  • 如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器会发出警告。
  • 如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告。
  • 如果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息。

 

总结:(简单理解,若有不当,欢迎指正)

什么是CA?

CA一个公认的证书授权中心,在世界各地有不同的代理商,国内代理商如天威诚信等。

 

什么是CA证书?

 就是 CA 给软件公司颁发的一个数字证明呗,不过它是要收费的,由代理商向公司收取。

 

CA证书如何工作?

既然花钱买了证书回来,那肯定想知道它能给我们带来什么好处。好处就是提醒用户:你登录的网址是正牌的!
怎么实现的呢:浏览器请求CA中心获取“给钱买了证书” 的名单-----》 判断是否在名单内-----》不在就报错。具体名单 参考上面https请求网页实例
 

 

什么是数字签名?

就是对一个字符串的hash值,可能会有多种处理,如上面例子中,用了私钥再次加密。