根据非对称密码学的原理,每个证书持有人都有一对公钥和私钥,这两把密钥可以互为加解密。公钥是公开的,不需要保密,而私钥是由证书持人自己持有,并且必须妥善保管和注意保密。数字证书则是由证书认证机构(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前,必须确保系统安装了JSSEJDK1.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 -storepass changeit -keystore server.keystore
然后把RSA证书输入到一个新的信任库文件中。这个信任库被客户端使用,被用来验证服务器端的身份。
keytool -import -file -storepass changeit -uststore -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 -storepass changeit -keystore client.keystore
keytool -import -file -storepass changeit -uststore -alias clientkey -noprompt
生成了密匙库和信任库,我们把服务器端的密匙库(server.keystore)和信任库(uststore)拷贝到Tomcat的某个目录。
下面需要更改Tomcat的配置文件(l),增加一下部署描述符:
例程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.uststore" truststorePass="changeit"
                  sslProtocol="TLS" />
             
clientAuth参数制定服务器是否要验证客户端证书,如果指定为true,那么客户端必须拥护
服务器端可信任的证书后服务器才能响应客户端;如果指定为false,那么服务器不需要验证客户端的证书。手机unknown是什么意思

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。