您的位置:首页 > 其它

数字证书、公钥和私钥这三者之间的关系是什么

2014-12-22 16:01 495 查看
根据非对称密码学的原理,每个证书持有人都有一对公钥和私钥,这两把密钥可以互为加解
密。公钥是公开的,不需要保密,而私钥是由证书持人自己持有,并且必须妥善保管和注意
保密。
数字证书则是由证书认证机构

CA

对证书申请者真实身份验证之后,

CA
的根证书
对申请人的一些基本信息以及申请人的公钥进行签名(相当于加盖发证书机构的公章)后形
成的一个数字文件。
 
CA
完成签发证书后,会将证书发布在
CA
的证书库(目录服务器)中,任何人都可以查询和
下载,因此数字证书和公钥一样是公开的。
     
可以这样说,
数字证书就是经过
CA
认证过的公钥,
而私钥一般情况都是由证书持有者在自己
本地生成的,由证书持有者自己负责保管。
 
具体使用时,签名操作是发送方用私钥进行签名,接受方用发送方证书来验证签名;加密操
作则是用接受方的证书进行加密,
接受方用自己的私钥进行解密。
 
因此,
如果说数字证书是
电子商务应用者的网上数字身份证话,那么证书相应的私钥则可以说是用户的私章或公章
 
 
 
 
 
 
SSL
由两个共同工作的协议组成:
"SSL 
记录协议
"

SSL Record Protocol
)和
"SSL 
握手协

"

SSL Handshake Protocol


SSL 
记录协议建立在可靠的传输协议(如
TCP
)之上,为
高层协议提供数据封装、压缩、加密等基本功能的支持;
SSL 
握手协议建立在
SSL
记录协议
之上,用于在实际的数据传输开始前,通信双方进行身份认证、协商加密算法、交换加密密
钥等。
 
 
SSL
握手协议包含两个阶段,第一个阶段用于建立私密性通信信道,第二个阶段用于客户认
证。第一阶段是通信的初始化阶段,在此阶段,首先
SSL
要求服务器向浏览器出示证书;然
后浏览器中的
SSL
软件发给服务器一个随机产生的传输密钥,
此密钥由已验证过的公钥加密,
随机产生的传输密钥是核心机密,只有客户的浏览器和此公司的
Web
服务器知道这个数字序
列。第二阶段的主要任务是对客户进行认证,此时服务器已经被认证了。服务器方向客户发
出认证请求消息。客户收到服务器方的认证请求消息后,发出自己的证书,并且监听对方回
送的认证结果。而当服务器收到客户的证书后,给客户回送认证成功消息,否则返回错误消
息。到此为止,握手协议全部结束。
 
 
要使用
SSL
协议,服务器至少有一个私有密匙和一个用于验证身份的证书。私有密匙在密匙
交换算法中用到,证书将发送到客户端,以通知服务器端的身份。如果
SSL
服务器要验证客
户端的身份,那么客户端必须也有自己的密匙库(包含私有密匙和证书)

JSSE
中引入了信
任库(
truststore
)的概念,它是用来保存证书的数据库。客户端或者服务器通过信任库来
验证对方的身份。
 
 
在使用
SSL
前,必须确保系统安装了
JSSE

JDK1.4
版本默认以及安装了
JSSE
。如果没有安
装,把下载安装好的
jar
文件拷贝到
%JAVA_HOME%\ 
jre\lib\ext
目录下。这样,就安装好了
JSSE
的运行环境。
 
 
下面我们使用
JDK
自带的工具创建密匙库和信任库。
 
 

1
)通过使用一下的命令来创建服务器端的密匙库。
 
 
           keytool -genkey -alias hellking -keystore server.keystore -keyalg RSA 
输入
keystore
密码:
     changeit 
您的名字与姓氏是什么?
 
     [Unknown]

     hellking-Server 
您的组织单位名称是什么?
 
     [Unknown]

     huayuan 
您的组织名称是什么?
 
     [Unknown]

     huayuan 
您所在的城市或区域名称是什么?
 
     [Unknown]

     beijing 
您所在的州或省份名称是什么?
 
     [Unknown]

     beijing 
该单位的两字母国家代码是什么
 
     [Unknown]

     cn 
CN=chen ya qiang, OU=huayuan, O=huayuan, L=beijing, ST=beijing, C=cn 
正确吗?
 
     [

]

     y 
输入
<hellking>
的主密码
 
           
(如果和
 keystore 
密码相同,按回车)

 
         
 
 
 
以上命令执行完成后,将获得一个名为
server.keystore
的密匙库。
 
 
2)
生成客户端的信任库。首先输出
RSA
证书:
 
 
keytool -export -file test_axis.cer -storepass changeit -keystore server.keystore 
 
 
 
然后把
RSA
证书输入到一个新的信任库文件中。这个信任库被客户端使用,被用来验证服务
器端的身份。
 
 
keytool 
-import 
-file 
test_axis.cer 
-storepass 
changeit 
-keystore 
client.truststore 
-alias serverkey -noprompt 
 
 
 
3
)创建客户端密匙库。重复步骤
1
,创建客户端的密匙库。也可以使用以下命令来完成:
 
 
keytool -genkey -dname " CN=hellking-Client, OU=tsinghua, O=tsinghua, L=BEIJING, 
S=BEIJING, C=CN" 

-storepass changeit -keystore client.keystore -keyalg RSA -keypass changeit 
 
 
 
4
)生成服务器端的信任库。
 
 
keytool -export -file test_axis.cer -storepass changeit -keystore client.keystore 
keytool 
-import 
-file 
test_axis.cer 
-storepass 
changeit 
-keystore 
server.truststore 
-alias clientkey -noprompt 
 
 
 























server.keystore






server.truststore
)拷贝到
Tomcat
的某个目录。
 
 
下面需要更改
Tomcat
的配置文件(
server.xml

,增加一下部署描述符:
 
 
 
例程
11 

Tomcat
配置
SSL
协议。
 
                     <Connector port="8443"  
                  maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
                  enableLookups="false" disableUploadTimeout="true" 
                  acceptCount="100" debug="0" scheme="https" secure="true" 
                  clientAuth="true" 
keystoreFile="K:\jakarta-tomcat-5.0.16\server.keystore" keystorePass="changeit" 
                    truststoreFile="K:\jakarta-tomcat-5.0.16\server.truststore" 
truststorePass="changeit" 
                  sslProtocol="TLS" /> 
                
 
 
 
clientAuth
参数制定服务器是否要验证客户端证书,
如果指定为
true

那么客户端必须拥护
服务器端可信任的证书后服务器才能响应客户端;如果指定为
false
,那么服务器不需要验
证客户端的证书。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: