数字证书在java中的使用

http://blog.csdn.net/lovelyhermione/article/details/4477222

前段时间一直在做数字证书,可能是因为是第一次接触数字证书这种东西,由于概念还不是很理解,所以感觉无从下手。通过查找资料,逐步摸索,对数字证书有了初步了解。个人认为主要是对SSL概念的理解,内容其实很少,没有刚开始想象的那么复杂。

 

所谓证书(Certificate,也称public-key certificate)就是用某种签名算法对某些内容(比如公钥)进行数字签名后得到的、可以用来当成信任关系中介的数字凭证。证书发行机构通过发行证 书 告知证书使用者或实体其公钥(public-key)以及其它一些辅助信息。证书在电子商务安全交易中有着广泛的应用,证书发行机构也称 CA(Certificate Authority)。

 

证书的应用步骤是:

(1) A把自己的公钥PKA送到CA(Certificate Authority);

(2) CA用自己的私钥和A的公钥生成A的证书,证书内包括CA的数字签名。签名对象包括需要在证书中说明的内容,比如A的公钥、时间戳、序列号等,为了简化这 里不妨假设证书中只有三项内容:A的公钥PKA、时间戳TIME1、序列号IDA。那么CA发送给A的简单证书凭证可表达 为:CertA=Eca[TIME1,IDA,PKA];

(3) B同样把自己的公钥PKB送到CA;

(4) B得到CA发布的证书CertB;

(5) A告知B证书CertA;

(6) B告知A证书CertB。

A、B各自得到对方证书后,利用从CA得到的公钥(在CA的自签证书中)验证彼此对方的证书是否有效,如果有效,那么就得到了彼此的公钥。利用对方的公钥,可以加密数据,也可以用来验证对方的数字签名。

 

为了方便说明,并没有使用从CA获得的证书,而是通信双方各自产生自签证书。

 

下面是通过最近的研究总结出来的数字证书在java中的使用:

1,生成服务器端证书
keytool -genkey -v  -alias server -keyalg RSA -keystore server.keystore

2,生成客户端证书
keytool -genkey -v  -alias client -keyalg RSA -storetype PKCS12 -keystore client.p12

3,将客户端证书注册到服务器端 成为受信任的(服务器端只接收.cer格式)

 (1)将.p12格式转换成.cer格式
 keytool -export  -alias client -keystore client.p12 -storetype PKCS12 -rfc -file client.cer

 (2)注册为受信任的
 keytool -import -v -file client.cer  -keystore server.keystore

4,在server.xml中配置:

 <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
     maxThreads="150" scheme="https" secure="true"
     clientAuth="true" sslProtocol="TLS"
     keystoreFile="D:/server.keystore" keystorePass="123456"
     truststoreFile="D:/server.keystore" truststorePass="123456"
 />

5,在程序中加入filter,验证数字证书的有效性

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享