Tomcat搭建https并与APR模式兼容
前言
当前环境:Ubuntu14 server 64位
Jdk、tomcat都已安装成,并且tomcat以配置APR运行模式
生成https证书
1、Keytool:是jdk自带的证书管理工具。
2、证书生成:
keytool -genkey -alias myserver -keyalg RSA -keystore my.keystore -dname "CN=192.168.5.244, OU=192.168.5.244, O=192.168.5.244, L=HB, ST=WH, C=CN" -keypass 123456 -storepass 123456 -validity 36500
参数介绍:
-genkey:表示要创建一个新的秘钥。
-alias:证书别名,每个keystore都关联一个别名,不区分大小写。
-keyalg:使用的加密算法,这里是RSA。
-keystore:秘钥保存的目录文件,不写目录路径的话生成在当前目录。
-dname:秘钥的识别名。
CN:名称,一般填写服务IP或域名。
OU:组织单位,可随便填,这里写IP。
O:组织名,可随便填,这里写IP。
L:城市名,省会名。
ST:州名,当前所在城市名。
C:国家名,CN表示中国。
-keypass:私有秘钥的密码。
-storepass:存取密码。
-validity:秘钥有效期,36500表示100年,默认90天。
若tomcat不需要以APR模式运行,只需修改tomcat/conf/server.xml文件:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="my.keystore" keystorePass="123456" />
同时修改tomcat/conf/web.xml文件:(在</welcome-file-list>标签后加入以下信息)
<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>
配置APR模式证书
APR模式实际上就是调用Apache底层的http服务,所以在https方面,APR和Apache一样需要采用OpenSSL。且需要一个cer证书文件和一个key私钥文件。
1、 导出cer证书文件:
keytool -export -alias myserver -keystore my.keystore -file mycerts.cer -storepass 123456
2、 获取私钥文件:
2.1、把keystore转换成为pkcs12格式:
keytool -importkeystore -srckeystore my.keystore -destkeystore my.p12 -deststoretype PKCS12
2.2、使用openssl导出私钥:
openssl pkcs12 -in my.p12 -out myprivKey.pem –nodes
至此我们需要的两个文件分别是mycerts.cer证书文件和myprivKey.pem私钥文件,把两个文件拷贝到tomcat根目录。
然后修改tomcat/conf/server.xml文件:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
maxThreads="500"
minSpareThreads="150"
enableLookups="false"
disableUploadTimeout="true"
acceptCount="300"
compression="on" compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
SSLCertificateFile="/usr/local/tomcat/mycerts.cer"
SSLCertificateKeyFile="/usr/local/tomcat/myprivKey.pem"/>
注意” SSLCertificateFile”和” SSLCertificateKeyFile”配置的是绝对路径
然后重启tomcat,查看日志打印:
额外备注
1、 将cer证书导入JVM的命令:
keytool -import -trustcacerts -alias myserver -keystore "$JAVA_HOME/jre/lib/security/cacerts" -file mycerts.cer -storepass 123456
2、 查看JVM中是否存在此别名的证书命令:
keytool -list -v -alias myserver -keystore "$JAVA_HOME/jre/lib/security/cacerts" -storepass 123456
3、 删除JVM中此别名的证书命令:
keytool -delete -alias myserver -keystore "$JAVA_HOME/jre/lib/security/cacerts" -storepass 123456