,在用户登录时除了效验用户名密码,还需验证其数字证书。
相关资源:IBM developerWroks中国中的tomcat4中使用SSL,javaeye中的Acegi X.509双向认证 与tomcat4中使用SSL中的异同:jdk1.4中已经包含JSSE。
与AcegiX.509双向认证中的异同:tomcat6配置文件多了SSLEnabled="true"属性。
1.生成CA证书。目前不使用第三方权威机构的CA来认证,自己充当CA的角色。
1.创建私钥 :C:/OpenSSL/apps>openssl genrsa -out root/root-key.pem 1024
2.创建证书请求 :C:/OpenSSL/apps>openssl req -new -out root/root-req.csr -key root/root-key.pem
3.自签署证书 :C:/OpenSSL/apps>openssl x509 -req -in root/root-req.csr -out root/root-cert.pem -signkey
root/root-key.pem -days 3650
4.将证书导出成浏览器支持的.p12格式 :C:/OpenSSL/apps>openssl pkcs12 -export -clcerts -in root/root-cert.pem -inkey
root/root-key.pem -out root/root.p12
2.生成server证书。
1.创建私钥 :C:/OpenSSL/apps>openssl genrsa -out server/server-key.pem 1024
2.创建证书请求 :C:/OpenSSL/apps>openssl req -new -out server/server-req.csr -key server/server-key.pem
3.自签署证书 :C:/OpenSSL/apps>openssl x509 -req -in server/server-req.csr -out server/server-cert.pem -signkey
server/server-key.pem -CA root/root-cert.pem -CAkey root/root-key.pem -CAcreateserial -days 3650
4.将证书导出成浏览器支持的.p12格式 :C:/OpenSSL/apps>openssl pkcs12 -export -clcerts -in server/server-cert.pem -inkey
server/server-key.pem -out server/server.p12
3.生成client证书。
1.创建私钥 :C:/OpenSSL/apps>openssl genrsa -out client/client-key.pem 1024
2.创建证书请求 :C:/OpenSSL/apps>openssl req -new -out client/client-req.csr -key client/client-key.pem
3.自签署证书 :C:/OpenSSL/apps>openssl x509 -req -in client/client-req.csr -out client/client-cert.pem -signkey
client/client-key.pem -CA root/root-cert.pem -CAkey root/root-key.pem -CAcreateserial -days 3650
4.将证书导出成浏览器支持的.p12格式 :C:/OpenSSL/apps>openssl pkcs12 -export -clcerts -in client/client-cert.pem -inkey
client/client-key.pem -out client/client.p12
4.根据root证书生成jks文件
C:/OpenSSL/apps/root>keytool -import -v -trustcacerts -storepass password -alias root -file root-cert.pem
-keystore root.jks
5.配置tomcat ssl,修改conf/server.xml。tomcat6中多了SSLEnabled="true"属性。
keystorefile, truststorefile设置为你正确的相关路径
xml 代码
<connector secure="true" scheme="https" protocol="HTTP/1.1" port="8443"
sslenabled="true" maxhttpheadersize="8192" maxthreads="150"
minsparethreads="25" maxsparethreads="75" enablelookups="false"
disableuploadtimeout="true" acceptcount="100" sslprotocol="TLS"
clientauth="true" keystorefile="d:/path/bin/x509/server.p12"
keystoretype="PKCS12" keystorepass="123456" truststorefile="d:/path/bin/x509/root.jks"
truststoretype="JKS" truststorepass="123456"/>
6.将root.p12,client.p12分别导入到IE中去(打开IE->;Internet选项->内容->证书)。
root.p12导入至受信任的根证书颁发机构,client.p12导入至个人
7.访问你的应用http://ip:8443,如果配置正确的话会出现请求你数字证书的对话框。
8.在jsp中取得符合x.509格式的证书
java 代码
<%
//获得certificate chain
X509Certificate[] ca=(X509Certificate[])request.getAttribute("javax.servlet.request.X509Certificate");
if(ca==null)
{
out.println("No cert info!");
} else {
String serial=ca[0].getSerialNumber().toString();
String DN=ca[0].getSubjectDN().toString();
}
%>
http://grandboy.javaeye.com/blog/179410
用Keytool和OpenSSL生成和签发数字证书
转自: http://zhouzhk.javaeye.com/blog/136943
生成server端证书
1)生成KeyPair生成密钥对
keytool -genkey -alias tomcat_server -validity 365 -keyalg RSA -keysize 1024 -keypass 123456 -storepass 123456 -keystore server_keystore
输入common name时,要和服务器的域名保持一致。
2)生成证书签名请求
keytool -certreq -alias tomcat_server -sigalg MD5withRSA -file tomcat_server.csr -keypass 123456 -storepass 123456 -keystore server_keystore
3)用CA私钥进行签名,也可以到权威机构申请CA签名。
openssl ca -in tomcat_server.csr -out tomcat_server.crt -cert ca.crt -keyfile ca.key -notext -config openssl.cnf
其中-notext表示不要把证书文件的明文内容输出到文件中去,否则在后面用keytool导入到keystore时会出错。
4)导入信任的CA根证书到keystore
keytool -import -v -trustcacerts -alias my_ca_root -file ca.crt -storepass 123456 -keystore server_keystore
5)把CA签名后的server端证书导入keystore
keytool -import -v -alias tomcat_server -file tomcat_server.crt -storepass 123456 -keystore server_keystore
6)查看server端证书
keytool -list -v -keystore server_keystore
可以看到tomcat_server的证书链长度是2
生成client端证书
1)生成客户端CSR
openssl genrsa -des3 -out tomcat_client.key 1024
openssl req -new -key tomcat_client.key -out tomcat_client.csr -config openssl.cnf
2)用CA私钥进行签名,也可以到权威机构申请CA签名
openssl ca -in tomcat_client.csr -out tomcat_client.crt -cert ca.crt -keyfile ca.key -notext -config openssl.cnf
3)生成PKCS12格式证书
openssl pkcs12 -export -inkey tomcat_client.key -in tomcat_client.crt -out tomcat_client.p12
4)使用Keytool列出pkcs12证书的内容:
keytool -rfc -list -keystore tomcat_client.p12 -storetype pkcs12
--------------------------------
keytool可以导出.p12后缀名的个人证书吗?
好像不行,keytool产生的证书是JKS编码的
除了keytool,还有很多方法可以完成对keystore里面证书的操作!
比如
1、用KeyTool结合pkeytool导出私钥和证书,然后用openssl将私钥和证书合并成p12格式,具体命令请参考pkeytool和openssl帮助
2、图形工具portecle,直接导出p12格式
3、KeyTool GUI 1.6,图形界面
4、keystore explorer,需要付费
etc.
--------------------------------------------
如何用Tomcat和Openssl构建HTTPS双向认证环境(HTTPS客户端认证)
文章出处:http://www.diybl.com/course/4_webprogram/jsp/jsp_js/200855/113649.html
--------------------------------------------
[OpenSSL示例]HTTPS中间人攻击
http://hi.baidu.com/52hack/blog/item/b27f52af5d3881f3fbed50d9.html