Tomcat6配置SSL的方法

因为做项目测试的时候,用到了https,所以现在需要在tomcat中配置SSL。

 

tomcat6配置双向认证 

 

1、生成服务器端证书 

 

view plaincopy to clipboardprint?

keytool -genkey -keyalg RSA -dname "cn=localhost,ou=sango,o=none,l=china,st=beijing,c=cn" -alias server -keypass password -keystore server.jks -storepass password -validity 3650  

 

keytool -genkey -keyalg RSA -dname "cn=localhost,ou=sango,o=none,l=china,st=beijing,c=cn" -alias server -keypass password -keystore server.jks -storepass password -validity 3650view plaincopy to clipboardprint?

<BR>2、生成客户端证书 <BR>  

 

2、生成客户端证书 view plaincopy to clipboardprint?

keytool -genkey -keyalg RSA -dname "cn=sango,ou=sango,o=none,l=china,st=beijing,c=cn" -alias custom -storetype PKCS12 -keypass password -keystore custom.p12 -storepass password -validity 3650  

 

keytool -genkey -keyalg RSA -dname "cn=sango,ou=sango,o=none,l=china,st=beijing,c=cn" -alias custom -storetype PKCS12 -keypass password -keystore custom.p12 -storepass password -validity 3650

客户端的CN可以是任意值。 

3、由于是双向SSL认证,服务器必须要信任客户端证书,因此,必须把客户端证书添加为服务器的信任认证。由于不能直接将PKCS12格式的证书库导入,我们必须先把客户端证书导出为一个单独的CER文件,使用如下命令,先把客户端证书导出为一个单独的cer文件:

 

view plaincopy to clipboardprint?

keytool -export -alias custom -file custom.cer -keystore  custom.p12 -storepass password -storetype PKCS12 -rfc  

 

keytool -export -alias custom -file custom.cer -keystore  custom.p12 -storepass password -storetype PKCS12 -rfc

然后,添加客户端证书到服务器中(将已签名数字证书导入密钥库)

 

view plaincopy to clipboardprint?

keytool -import -v -alias custom -file custom.cer -keystore  server.jks -storepass password  

 

keytool -import -v -alias custom -file custom.cer -keystore  server.jks -storepass password

4、查看证书内容

 

view plaincopy to clipboardprint?

keytool -list -v -keystore server.jks -storepass password  

 

keytool -list -v -keystore server.jks -storepass password

5、配置tomcat service.xml文件

 

view plaincopy to clipboardprint?

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"  

    maxThreads="150" scheme="https" secure="true"  

    clientAuth="true" sslProtocol="TLS"  

    keystoreFile="D:/server.jks" keystorePass="password"  

    truststoreFile="D:/server.jks" truststorePass="password"  

/>  

 

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"

    maxThreads="150" scheme="https" secure="true"

    clientAuth="true" sslProtocol="TLS"

    keystoreFile="D:/server.jks" keystorePass="password"

    truststoreFile="D:/server.jks" truststorePass="password"

/>

clientAuth="true"表示双向认证 

6、导入客户端证书到浏览器 

双向认证需要强制验证客户端证书。双击“custom.p12”即可将证书导入至IE 

 

7、修改应用的web.xml,使其自动启用SSL

 

<login-config>

 <auth-method>CLIENT-CERT</auth-method>

 <realm-name>Client Cert Users-only Area</realm-name>

</login-config>

<security-constraint>

 <web-resource-collection>

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

  <url-pattern>/*</url-pattern>

 </web-resource-collection>

 <user-data-constraint>

  <transport-guarantee>CONFIDENTIAL</transport-guarantee>

 </user-data-constraint>

</security-constraint> 

 

 

tomcat6配置单向认证 

 

1、生成服务器端证书

 

view plaincopy to clipboardprint?

keytool -genkey -keyalg RSA -dname "cn=localhost,ou=sango,o=none,l=china,st=beijing,c=cn" -alias server -keypass password -keystore server.jks -storepass password -validity 3650  

 

keytool -genkey -keyalg RSA -dname "cn=localhost,ou=sango,o=none,l=china,st=beijing,c=cn" -alias server -keypass password -keystore server.jks -storepass password -validity 3650

2、由于是单向认证,没有必要生成客户端的证书,直接进入配置tomcat service.xml文件

 

view plaincopy to clipboardprint?

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"  

    maxThreads="150" scheme="https" secure="true"  

    clientAuth="false" sslProtocol="TLS"  

    keystoreFile="D:/server.jks" keystorePass="password"       

/>  

 

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"

    maxThreads="150" scheme="https" secure="true"

    clientAuth="false" sslProtocol="TLS"

    keystoreFile="D:/server.jks" keystorePass="password"    

/>

clientAuth="false"表示单向认证,同时去掉truststoreFile="D:/server.jks" truststorePass="password"这2个属性

 

PS:用https://localhost:8443测试,之前一直不成功,是因为配置的时候,用了eclipse启动的。之后虽然修改了server.xml文件,但是一直就是报异常,说connceted refused。后来将server删除,重新生成就可以了。

 

另附:双向认证的批处理文件,用记事本编辑,文件后缀改为.bat

 

set local_driver=%cd:~0,2%

set local_path=%cd%

 

keytool -genkey -keyalg RSA -dname "cn=localhost,ou=sango,o=none,l=china,st=beijing,c=cn" -alias server -keypass password -keystore server.jks -storepass password -validity 3650

 

keytool -genkey -keyalg RSA -dname "cn=sango,ou=sango,o=none,l=china,st=beijing,c=cn" -alias custom -storetype PKCS12 -keypass password -keystore custom.p12 -storepass password -validity 3650

 

keytool -export -alias custom -file custom.cer -keystore  custom.p12 -storepass password -storetype PKCS12 -rfc

 

keytool -import -v -alias custom -file custom.cer -keystore  server.jks -storepass password

 

keytool -list -v -keystore server.jks -storepass password

 

%local_driver%

cd %local_path%

 

pause 

 

有一些其它的选项配置SSL协议。你可能需要增加或改变下面的属性值,取决于你开始对keystore的配置

 

clientAuth

 如果想要Tomcat为了使用这个socket而要求所有SSL客户出示一个客户证书,置该值为true。 

keystoreFile

 如果创建的keystore文件不在Tomcat认为的缺省位置(一个在Tomcat运行的home目录下的叫.keystore的文件),则加上该属性。可以指定一个绝对路径或依赖$CATALINA_BASE环境变量的相对路径。

 

keystorePass

 如果使用了一个与Tomcat预期不同的keystore(和证书)密码(changeit),则加入该属性。 

keystoreType

 如果使用了一个PKCS12 keystore,加入该属性。有效值是JKS和PKCS12。 

sslProtocol

 socket使用的加密/解密协议。如果使用的是Sun的JVM,则不建议改变这个值。据说IBM的1.4.1版的TLS协议的实现和一些流行的浏览器不兼容。这种情况下,使用SSL。 

ciphers

 此socket允许使用的被逗号分隔的密码列表。缺省情况下,可以使用任何可用的密码。 

algorithm

 使用的X509算法。缺省为Sun的实现(SunX509)。对于IBM JVMS应该使用ibmX509。对于其它JVM,参考JVM文档取正确的值。 

truststoreFile

 用来验证客户证书的TrustStore文件。 

truststorePass

 访问TrustStore使用的密码。缺省值是keystorePass。 

truststoreType

 如果使用一个不同于正在使用的KeyStore的TrustStore格式,加入该属性。有效值是JKS和PKCS12。 

 

 

在Java中取得证书内容:

 

1 X509Certificate[] certChain=(X509Certificate[])request  

 

 

2         .getAttribute("javax.servlet.request.X509Certificate");  

 

3 int len=certChain.length;  

 

4 if (len>0){  

 

5     X509Certificate cert = (X509Certificate)certChain[0];  

6     Principal subject = cert.getSubjectDN();  

 

7     String certSubject = subject.getName();  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值