公钥、私钥、数字证书_解释

作者:David Youd

翻译:阮一峰  原文网址:

http://www.youdzone.com/signature.html

http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html

其他扩展文章:

月光博客:为什么12306要安装根证书http://www.williamlong.info/archives/3461.html


//

其他:

如何保证公钥不被篡改?

答:将公钥放在数字证书中,只要证书是可信的,公钥就是可信的。

公钥加密计算量太大,如何减少耗用时间?

答:每一次对话(session),客户端和服务器都生成一个对话密钥(session key),用它来加密信息,由于“对话密钥”是对称加密,所以运算速度非常快,而服务器公钥只用于加密“对话密钥”本身,这样就减少了加密运算的消耗时间。

因此SSL/TLS协议的基本过程是:

1)客户端向服务器索要并验证公钥(握手阶段,明文)

2)双方协商生成“对话密钥”(握手阶段,明文)

3)双方采用“对话密钥”进行加密通信

握手阶段详解:


1)客户端发出请求(ClientHello)  并提供如下信息

a 支持的协议版本,例如TLS 1.0
b 客户端生成的随机数,用于生成“对话密钥”
c 支持的加密方法,例如RSA公钥加密
c 支持的压缩方法

 
2)服务器回应(SeverHello)     包括如下信息 

a 确认使用的加密通信协议版本,如果客户端与服务器支持版本不一致,服务器关闭加密通信
b 服务器生成的随机数,用于生成“对话密钥”
c 确认使用的加密方法
d 服务器证书

3)客户端回应

客户端验证服务器证书,若证书问题,显示警告是否继续通信。

若证书安全,客户端从证书中提取公钥,向服务器发送如下信息:

a 随机数(用公钥加密,防止窃听)【第三个随机数,又称"pre-master key",三个随机数+加密方法 生成session key】
b 编码改变通知,表示随后的信息都将用双方协商的加密方法和密钥传输
c 客户端握手结束通知,表示客户端的握手阶段结束,同时包括hash值,供服务器校验

4)服务器回应
服务器生成 session key ,并发送如下信息:
a 编码改变通知,随后的信息都将使用双方协商的加密方法和密钥传输
b 服务器握手结束通知,表示服务器的握手阶段结束,同时包括hash值,供客户端校验


//

1、鲍勃有两把钥匙:公钥和私钥


 
2、鲍勃把公钥送给朋友们:帕蒂、道格、苏珊,每人一把


 
3、苏珊要给鲍勃写一封保密信件,她写完后用鲍勃的公钥加密,就可以达到保密的效果


 
4、鲍勃收到邮件后,用私钥解密,就可以看到邮件的内容。
(注意:只要鲍勃的私钥不泄露,这份邮件就是安全的,即使落在别人手里,也无法解密)


 
5、鲍勃给苏珊回信,决定采用“数字签名”,他写完后先用Hash函数,生成信件的摘要(Digest)


 
6、然后,鲍勃使用私钥,对这个摘要进行加密,生成“数字证书”(signature)


 
7、鲍勃将这个签名,附在信件下面,一起发送给苏珊


 
8、苏珊收件后,取下数字证书,使用鲍勃的公钥解密,得到邮件的摘要,由此证明,这封信确实是鲍勃发出的。


 
9、苏珊再对信件本身使用Hash函数,将得到的结果与上一步得到的摘要进行对比,如果两者一致,说明邮件未被修改过


 
10、复杂情况:道格想欺骗苏珊,他偷偷使用苏珊的电脑,用自己的公钥替换鲍勃的私钥。
此时,苏珊实际拥有的是道格的公钥。
因此,道格可以冒充鲍勃,用自己的私钥做成“数字证书”,写信给苏珊,让苏珊用假的鲍勃的公钥进行解密。


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


 
12、鲍勃拿到数字证书后,就可以放心给苏珊写信了,只要在签名的同时,附上数字证书即可。


 
13、苏珊收信后,用CA的公钥解开数字证书,就可以拿到鲍勃的真实公钥,以此判断数字证书是否鲍勃的。


 
14、以HTTPS协议为例,了解数字证书的应用,主要用于web加密
 
15、首先,客户端向服务器发出加密请求。


 
16、服务器用自己的私钥加密网页后,连同本身的数字证书,一起发送给客户端


 
17、客户端的证书管理器,有“受信任的根证书颁发机构”列表。
客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内。


 
18、如果数字证书记载的网址,与当前浏览的网址不一致,就说明该证书可能被毛用,浏览器发出警告。


 
19、如果这张证书不是由受信任的机构颁发的,浏览器就会发出另一种警告。


 
20


 
总结:公钥和私钥是成对的,它们互相解密。
公钥加密,私钥解密。
私钥数字签名,公钥验证。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: OpenSSL是一个开源的加密工具包,可以用于验证私钥证书。 在命令行中,使用openssl s_server -msg -verify命令可以执行验证私钥证书的操作。 -msg参数可以指定在连接中发送和接收的消息。 -verify参数用于启用验证模式。 在执行该命令时,OpenSSL会作为服务器运行,等待客户端连接。然后,OpenSSL会将所收到的消息打印出来。在验证模式下,OpenSSL会尝试验证客户端发送的证书。 在验证过程中,OpenSSL会使用传入的私钥和证书进行验证。私钥用于解密证书中的数字签名,并与证书中的公钥进行比对,以验证证书的真实性和完整性。 如果验证成功,OpenSSL会打印出相关验证信息。如果验证失败,OpenSSL会显示相应的错误信息,指示证书存在问题或不是一个有效的证书。 通过使用openssl s_server -msg -verify命令,我们可以方便地验证私钥证书,以确保其有效性和安全性。 需要注意的是,验证私钥证书需要在合适的环境中进行,并且应该使用正确的私钥和证书进行验证,以确保验证的准确性和可靠性。 ### 回答2: openssl s_server -msg -verify是一条命令,用于在openssl中进行私钥证书验证。 首先,我们需要了解openssl中私钥和证书的概念。私钥是一种用于加密和解密数据的密钥,它通常由证书颁发机构(CA)生成并颁发给特定的实体。而证书是由CA签名的包含实体公钥和其他相关信息的文件,它用于验证实体的身份。 使用openssl s_server -msg -verify命令时,我们可以在服务器模式下进行私钥证书验证。这个命令会打开一个服务器,并监听指定的端口,等待客户端连接。当客户端连接之后,服务器会使用私钥和证书对收到的数据进行验证。 私钥证书验证的过程如下: 1.服务器使用私钥解密收到的数据。 2.服务器使用证书验证解密后的数据的完整性和真实性。通过计算数据的散列值以及使用证书中的公钥验证该散列值,服务器可以确定数据是否被篡改过。 3.如果数据通过了验证,服务器会对数据进行响应。 使用openssl s_server -msg -verify命令可以方便地进行私钥证书验证,同时可以通过命令行参数调整验证的具体设置。这对于建立安全的网络连接和验证实体身份非常有用。 需要注意的是,私钥和证书的安全性非常重要。私钥应该保密且仅由合法的实体使用,证书应该由可信的CA签发。同时,定期更新证书和私钥也是很重要的安全措施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值