java-信息安全(十六)-双向认证

原文地址

http://snowolf.iteye.com/blog/510985

对于双向认证,做一个简单的描述。 
服务器端下发证书,客户端接受证书。证书带有公钥信息,用于验证服务器端、对数据加密/解密,起到OSI五类服务的认证(鉴别)服务和保密性服务。 

这只是单向认证,为什么?因为客户端可以验证服务器端,但服务器端不能验证客户端! 
如果客户端也有这样一个证书,服务器端也就能够验证客户端,这就是双向认证了! 

换言之,当你用银行的“U盾”之类的U盘与银行账户交互时,在你验证银行服务器的同时,服务器也在验证你!这种双重验证,正是网银系统的安全关键! 

单向认证见Java加密技术(十) 
双向认证需要一个CA机构签发这样的客户端、服务器端证书,首先需要CA机构构建一个根证书。keytool可以构建证书但不能构建我们需要的根证书,openssl则可以! 

根证书签发客户端证书,根私钥签发服务器端证书! 

我们直接使用linux下的openssl来完成CA,需要修改openssl.cnf文件,在ubuntu下的/etc/ssl/目录下,找到[ CA_default ]修改dir变量。 

[ CA_default ] 

#dir = ./demoCA # Where everything is kept 


我们把c盘的ca目录作为CA认证的根目录,文件修改后如下所示: 

[ CA_default ] 
dir = $ENV::HOME/ca # Where everything is kept 


我们需要在用户目录下构建一个ca目录,以及子目录,如下所下: 
ca 
|__certs 
|__newcerts 
|__private 
|__crl 

执行如下操作: 

 View Code

这个脚本就是最重要的结晶了!
执行结果,如下: 

引用
 View Code

来看一下这3套证书,如下两幅图所示: 
CA证书 
 
 
 

服务器证书 
 
 
 

客户证书 
 
 
 

证书链 
 

"ca.zlex.org"证书充当了CA根证书,"www.zlex.org"充当服务器端证书,"zlex"充当客户端证书 

使用keytool将其导入本地密钥库 
导入CA证书 

keytool -import -v -trustcacerts -alias ca.zlex.org -file ca.crt -storepass 123456 -keystore ca.keystore       

控制台输出 

复制代码
所有者:CN=ca.zlex.org, OU=zlex, O=zlex, L=BJ, ST=BJ, C=CN 
签发人:CN=ca.zlex.org, OU=zlex, O=zlex, L=BJ, ST=BJ, C=CN 
序列号:989b27ef00e53a99 
有效期: Wed Jul 18 17:53:51 CST 2012 至Sat Jul 16 17:53:51 CST 2022 
证书指纹: 
         MD5:BA:14:1F:89:3A:1E:63:7B:20:AC:5A:50:FE:65:7E:16 
         SHA1:E0:A4:0E:6F:09:7E:01:27:C0:FC:62:26:1A:0C:C6:7B:BF:6A:18:B3 
         签名算法名称:SHA1withRSA 
         版本: 1 
信任这个认证? [否]:  y 
认证已添加至keystore中 
[正在存储 ca.keystore] 
复制代码

导入服务器端证书 

keytool -import -v -trustcacerts -alias www.zlex.org -file server.crt -storepass 123456 -keystore server.keystore  

控制台输出 

 View Code

导入客户端证书 

keytool -import -v -trustcacerts -alias client -file client.crt -storepass 123456 -keystore client.keystore  

以下是输出内容:

 View Code

PS 吊销证书:

echo 吊销客户端证书  
openssl ca -revoke $certs_path/client.crt -cert $certs_path/ca.crt -keyfile $private_path/ca.pem   
Using configuration from /etc/pki/tls/openssl.cnf 
Enter pass phrase for private/ca.pem: 
Revoking Certificate 02. 
Data Base Updated

生成证书吊销列表文件(CRL) 
执行命令如下: 

openssl ca -gencrl -out ca.crl -config "$HOME/testca/conf/testca.conf"  

crldays和-crlhours参数,说明下一个吊销列表将在多少天后(或多少小时候)发布。 

可以用以下命令检查testca.crl的内容: 

openssl crl -in testca.crl -text -noout  

引用 
http://blog.csdn.net/gothicane/articles/2865818.aspx 
http://www.5dlinux.com/article/7/2009/linux_35291.html 
http://www.tc.umn.edu/~brams006/selfsign_ubuntu.html 
http://www.tc.umn.edu/~brams006/selfsign.html 
http://zhouzhk.iteye.com/blog/136943 
http://bbs.cfan.com.cn/thread-743287-1-1.html 
http://www.iteye.com/problems/4072 
http://blog.csdn.net/jasonhwang/archive/2008/04/26/2329589.aspx 
http://blog.csdn.net/jasonhwang/archive/2008/04/29/2344768.aspx 

原文地址:https://www.cnblogs.com/guweiwei/p/8005840.html