首页 > 代码库 > Tomcat7配置SSL
Tomcat7配置SSL
StartCom可以免费的为大家提供免费的SSL证书,可以到官网申请。
注意事项
整个注册过程比较简单,但在注册及使用的时候有几点需要注意的地方:
- 注册时必须填写真实的信息,否则申请会被拒绝
- 注册后需要认证域名,并且只能是一级域名,认证时会往域名邮箱(如webmaster@xxxx.com或相关的邮箱)发送验证码,登陆邮箱输入验证码即可通过验证
- StartSSL使用证书登陆,没有用户名和密码,所以一定要保存好注册时的证书,做好备份,如果弄丢了,只能重新申请了,备份方法:https://www.startssl.com/?app=25#4
- 免费的不支持一个域名多个不同的证书,如果之前创建错了,要销毁的话,需要支付$24.9的费用
验证域名
进入"Control Panel", 选择"Validation Wizard", 根据步骤一步步的验证域名。
创建证书
进入"Control Panel",选择"Certificates Wizard", 在target处选择"Web server SSL/TLS certificate", 根据向导提示,创建密钥进而创建证书。
如果不需要双向认证的话,ssl.key可以不需要解密,如果需要使用双向认证的话,则需要先把ssl.key进行解密后再创建PKCS#12(PFX)文件,否则会报错。
Caused by: java.io.IOException: DerInputStream.getLength(): lengthTag=109, too big. at sun.security.util.DerInputStream.getLength(DerInputStream.java:561) at sun.security.util.DerValue.init(DerValue.java:365) at sun.security.util.DerValue.<init>(DerValue.java:320) at sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:1220) at java.security.KeyStore.load(KeyStore.java:1214) at org.apache.tomcat.util.net.jsse.JSSESocketFactory.getStore(JSSESocketFactory.java:392) at org.apache.tomcat.util.net.jsse.JSSESocketFactory.getTrustStore(JSSESocketFactory.java:343) at org.apache.tomcat.util.net.jsse.JSSESocketFactory.getTrustManagers(JSSESocketFactory.java:599) at org.apache.tomcat.util.net.jsse.JSSESocketFactory.getTrustManagers(JSSESocketFactory.java:511) at org.apache.tomcat.util.net.jsse.JSSESocketFactory.init(JSSESocketFactory.java:434) at org.apache.tomcat.util.net.jsse.JSSESocketFactory.createSocket(JSSESocketFactory.java:181) at org.apache.tomcat.util.net.JIoEndpoint.bind(JIoEndpoint.java:398) at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:646) at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:434) at org.apache.coyote.http11.AbstractHttp11JsseProtocol.init(AbstractHttp11JsseProtocol.java:119) at org.apache.catalina.connector.Connector.initInternal(Connector.java:978) ... 13 more
创建PKCS12文件
点击Control Panel中的Toolbox,找到create pkcs#12(pfx)文件,根据向导创建文件,注意这里的密钥需要是解密后的密钥,如果是加密的,则会在双向认证的时候报上面的错误。
配置tomcat
编辑${CATLINA_HOME}/conf/server.xml。
单向认证
直接使用从网站上创建的p12文件, 注意clientAuth需要设置成false
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" keystoreFile="/home/hotleave/.server.p12" keystorePass="changeit" keystoreType="PKCS12" clientAuth="false" sslProtocol="TLS" />
双向认证
双向认证时,无法使用使用了加密的密钥创建的p12文件,如果之前创建的是加密的,则可以先用toolbox中的Decrypt Private Key进行解密再创建p12文件。
1. 双向认证时,无法再直接使用p12文件,需要改成java的keystore文件(假设从startssl中创建的p12文件保存在"~/.server.p12")
keytool -importkeystore -destkeystore server.jks -srckeystore ~/.server.p12 -srcstoretype PKCS12
2. 创建客户端证书,alias参数可以随意指定
keytool -genkey -v -alias client -keyalg RSA -storetype PKCS12 -keystore client.p123. 导出客户端证书的公钥,alias参数要与上一步指定的相同
keytool -export -alias client -keystore client.p12 -storetype PKCS12 -rfc -file client.cer4. 将公钥保存到keystore中供服务器使用
keytool -import -v -file client.cer -keystore clientKeys.jks
5. 接下来配置tomcat
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" keystoreFile="/home/hotleave/.server.jks" keystorePass="changeit" truststoreFile="/home/hotleave/clientKeys.jks" truststorePass="changeit" clientAuth="true" sslProtocol="TLS" />6. 运行./catalina.sh configtest检测配置结果,如果不报错,基本就算是配置成功了。
7. 启动服务,直接访问时,会提示客户端认证失败。将第2步创建的证书导入到浏览器中,再访问服务则可以正常访问。
Tomcat7配置SSL