| Posted in JAVA技术 @ 2007/10/10 13:48 by elliott
最近要做一个登录时数字证书验证的功能,在用户登录时除了效验用户名密码,还需验证其数字证书。

相关资源:IBM developerWroks中国中的tomcat4中使用SSLjavaeye中的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设置为你正确的相关路径
引用
<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格式的证书

引用
<%
       //获得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();  
     }
     %>


作者:elliott@博爱老头的草屋
地址:http://www.icnote.com/post/80/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最新日志 随机日志 综合排行
  • 钻石壁纸+一首经典老歌
  • 国内3G牌照正式发放 扫盲...
  • 用java将本地化语言转换...
  • ThrottleLock ...
  • 新年快乐
  • [music] Sisse...
  • 可口的三文鱼 你不知道的故...
  • [music] 听歌时间-...
  • 平安夜 杂记
  • DOPOD S900 官方...
  • Fedora 9 下配置 ...
  • ISO8583包简介
  • 自己整理的一些表单验证的通...
  • DOPOD S900 官方...
  • 木桶新论与团队建设[项目管...
  • [音乐]老歌重听-Ever...
  • 吃饭的时候遇到一情侣之间的...
  • 现代版 愚公移山
  • CN99的fedora源挂...
  • 美国对台军售 讹诈中国
  • java  msn机器人
  • JSTL详解
  • 终于在fc6下把TL-WN...
  • eXtremeTable的...
  • DES加密、解密字符串算法...
  • IDC sees $49 ...
  • eclipse 安装pyt...
  • 放假早起,听到熟悉经典的音...
  • 测试Issue管理利器JI...
  • Waiting for f...
  • 文章来自: 本站原创
    - - Said,
    2008/07/15 17:36
    做了大约10次.

    单向成功.但双向不成功. T - T

    tomcat6 启用没出错信息.
    访问https://localhost:8443 就是不出页面.

    各位有什么提示么?
    ekk Said,
    2007/11/19 09:31
    你可以这样试试看可不可以,我是这么做的。

    登录时不直接跳转到https页面做验证,这样直接跳转过去,再跳转回http时,session貌似不可以共享。

    确认用户要验证证书登录后,除了常规的一些操作,在action页面中用js来处理。比如动态插入一个<script></script>段,src就为你https验证证书action页面。

    在上述https页面添加session试试。

    同时,插入script时,可以监听dom的readyState
    当readyState == "loaded"时,就说明https加载完成
    李巍 Email Homepage Said,
    2007/11/16 21:50
    您好,我最近想做一个登陆的程序,就是用ssl的,可是我不知道怎么做,https验证完信息后,得把用户信息存如session中,但是https协议要跳转到http上,可是这样session就共享不了了~你能给我一个例子么,说是说说思路也行~
    e-mail: liwei1984823@163.com
    分页: 1/1 第一页 1 最后页
    发表评论
    昵称
    密码 [ 游客无需密码 ]
    电邮
    网址
    打开HTML 打开UBB 打开表情 隐藏 记住我