公钥用来加密信息,私钥用来数字签名。
-
服务器有两把钥匙,一把是公钥,另一把是私钥。
服务器把公钥发送给每个客户端。
-
客户端发送消息
客户端向服务器发送消息,将消息用公钥加密。
服务器收到消息后,用私钥解密,获取消息内容。
-
服务端发送消息:数字签名(即私钥加密)
服务器给客户端回复消息,
- Hash 函数生成消息的摘要(digest)。
- 私钥对摘要进行加密,生成 “数字签名”。
服务器将 数字签名 ,附在消息下面,一起发给客户端。
-
客户端解密
客户端收到消息后。
- 取下数字签名,用服务器的公钥解密,得到消息的摘要。(可以解密,证明消息是服务器发出的)
- 再对消息本身使用 hash 函数,将得到的结果与上一步的摘要比对。(两者一致,就证明未被修改过)
数字证书
通过以上示例,信息交换很安全,那么为什么还需要 “数字证书(Digital Certificate)” 呢?
假设小明偷偷使用了你的电脑,用他自己的公钥换走了真实服务器的公钥。此时你的电脑实际拥有的是小明的公钥,但还以为是服务器的公钥。因此,小明就可以冒充服务器,用自己的私钥做成“数字签名”,发送消息给你,你会误用小明的公钥解密。后来你感觉不对劲,发现自己无法确定公钥
是否真的属于真实服务器。
那么如何才能证明 公钥 是真实服务器的呢?
1. 数字证书
服务器可以找“证书中心(certificate authority,简称CA)”,为公钥做公证。
证书中心(CA)用自己的私钥,对服务器的公钥和一些相关信息一起加密,生成“数字证书(Digital Certificate)”。
2. 附加数字证书
服务器拿到数字证书以后,再给客户端发送消息,只要在签名的同时,再附上数字证书就行了。
3. 客户端获取真实公钥
客户端收到消息后,用CA的公钥解开数字证书,就可以拿到服务器的真实公钥了,然后就能证明“数字签名”是否真的为真实服务器所签。
实例应用
这里我们看一个“数字证书”的实例:https协议。这个协议主要用于网页加密。
客户端(浏览器)的"证书管理器",有"受信任的根证书颁发机构"列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内。
非法警告
-
如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器会发出警告。
-
如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告。
参考
- 数字签名是什么? by 阮一峰
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!