BlogJava 联系 聚合 管理  

Blog Stats

随笔分类

随笔档案


chinadave

2009年12月14日 #

Tomcat6.0 SSL的配置

J2EE   2009-07-27 15:30   阅读217   评论0  
字号:    

1. 参考:

Tomcat 6.0 自带的文档docs/ssl-howto.html,详细介绍了配置过程。

2. 目的:

       以下详细描述配置过程,仅作为备忘录。

3. 备忘录:

Step1,安装tomcat 6.0.18,此为当前最新版本,需JDK5.0或以上。

l         JDK安装后,可以在命令行下使用如下命令检测是否成功。

C:\Documents and Settings\new>java -version

java version "1.6.0_10"

Java(TM) SE Runtime Environment (build 1.6.0_10-b33)

Java HotSpot(TM) Client VM (build 11.0-b15, mixed mode, sharing)

看到以上蓝色信息,则表示JDK安装配置成功。

l         Tomcat的运行需要配置JDK_HOMEJRE_HOME环境变量,JRE_HOME默认等于JDK_HOME的值。

Step2,创建服务器端certificate keystore和自签名certificate

       在命令行下使用如下命令:

C:\Documents and Settings\new>keytool -genkey -alias mykey -keyalg RSA -keystore server.keystore

输入keystore密码:123456

再次输入新密码:123456

您的名字与姓氏是什么?

  [Unknown]  dinstone

您的组织单位名称是什么?

  [Unknown]  advance software ltd.

您的组织名称是什么?

  [Unknown]  china

您所在的城市或区域名称是什么?

  [Unknown]  beijing

您所在的州或省份名称是什么?

  [Unknown]  beijing

该单位的两字母国家代码是什么

  [Unknown]  cn

CN=dinstone, OU=advance software ltd., O=china, L=beijing, ST=beijing, C=cn 正确吗?

  []  y

 

输入<mykey>的主密码

        (如果和 keystore 密码相同,按回车):

C:\Documents and Settings\new下可以找到一个文件:server.keystore,其中就包含了自签名的证书。

注意:

       这里要求certificate keystore certificate的密码一致,此为Tomcat的约束。

Step3,在%TOMCAT_HOME%目录下新建目录keystore,并拷贝server.keystore到其目录下。

Step4,修改%TOMCAT_HOME%/conf/server.xml文件。添加httpsConnector

<Connector

           port="8443" minSpareThreads="5" maxSpareThreads="75"

           enableLookups="true" disableUploadTimeout="true"

           acceptCount="100"  maxThreads="200"

           scheme="https" secure="true" SSLEnabled="true"

           keystoreFile="keystore/server.keystore" keystorePass="123456"

           clientAuth="false" sslProtocol="TLS"/>

注意:

       keystoreFile指向文件%TOMCAT_HOME%/keystore/server.keystore文件。

       keystorePass就是刚才生成certificate keystore的密码。

Step5,测试Https。访问https://localhost:8443/,提示有不安全的证书,接受证书,看到可亲的tom猫。

4. 延伸

某些情况下,某些特定资源需要走https协议,如登录请求。这时,我们可以在web.xml中配置约束。

<security-constraint>

       <web-resource-collection>

           <web-resource-name>SSL Resource</web-resource-name>

           <url-pattern>/login.jsp</url-pattern>

       </web-resource-collection>

       <user-data-constraint>

               <transport-guarantee>
                       CONFIDENTIAL

</transport-guarantee>

       </user-data-constraint>

</security-constraint>

这样当使用如下请求访问登录页面时,则服务器将该请求建立在https连接上。

http://localhost:8080/CCB/login.jsp

posted @ 2009-12-14 17:30 whoami 阅读(561) | 评论 (0)编辑 收藏

最近要做一个登录时数字证书验证的功能,在用户登录时除了效验用户名密码,还需验证其数字证书。

相关资源: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设置为你正确的相关路径
xml 代码
 
  1. <connector secure="true" scheme="https" protocol="HTTP/1.1" port="8443"      
  2. sslenabled="true" maxhttpheadersize="8192" maxthreads="150"      
  3. minsparethreads="25" maxsparethreads="75" enablelookups="false"      
  4. disableuploadtimeout="true" acceptcount="100" sslprotocol="TLS"      
  5. clientauth="true" keystorefile="d:/path/bin/x509/server.p12"      
  6. keystoretype="PKCS12" keystorepass="123456" truststorefile="d:/path/bin/x509/root.jks"    
  7. truststoretype="JKS" truststorepass="123456"/>    

6.将root.p12,client.p12分别导入到IE中去(打开IE->;Internet选项->内容->证书)。
root.p12导入至受信任的根证书颁发机构,client.p12导入至个人
7.访问你的应用http://ip:8443,如果配置正确的话会出现请求你数字证书的对话框。
8.在jsp中取得符合x.509格式的证书
  1. <%      
  2.         //获得certificate chain     
  3.         X509Certificate[] ca=(X509Certificate[])request.getAttribute("javax.servlet.request.X509Certificate");     
  4.       if(ca==null)     
  5.       {     
  6.         out.println("No cert info!");     
  7.       } else {     
  8.         String  serial=ca[0].getSerialNumber().toString();     
  9.         String DN=ca[0].getSubjectDN().toString();       
  10.       }     
  11.       %> 


posted @ 2009-12-14 11:51 whoami 阅读(139) | 评论 (0)编辑 收藏