Tomcat 服务器是一个入门的开放源代码的Web 应用服务器,属于轻量级应用服务器,在很多场合下被普遍使用,Tomcat支持pfx(p12)格式部署和keystore (kjs)方式部署SSL数字证书,详细如下:
Tomcat 服务器是一个入门的开放源代码的Web 应用服务器,属于轻量级应用服务器,在很多场合下被普遍使用,Tomcat支持pfx(p12)格式部署和keystore (kjs)方式部署SSL数字证书,详细如下:
一、准备材料
1. CSR证书请求文件和私钥文件
私钥通常是在准备CSR证书请求文件时生成,使用openSSL生成存在CSR文件的同级目录中 - 生成CSR证书请求文件 ,使用在线工具会将随机生成的私钥+CSR发送到邮箱中,这样在JAVA应用的服务器中可以使用部署PFX/P12格式证书,需要了解关于SSL/TLS多种证书类型的转换。使如果用keytool生成的CSR证书请求文件和私钥要求签发证书后将证书导入到keystore;将CSR提交给infiniSign申请证书,将私钥自行妥善保管。
2. 签发证书
签发证书也就是经过CA验证过域名或者企业信息后所签发的域名证书,例如Web服务器会使用 www.yourdomain.com 作为主要网站,那么该证书验证的域名就是 www.yourdomain.com, 通过CA签发的证书需要购买数字证书,/年的Comodo PositiveSSL就是一款的入门级SSL数字证书,立即前往购买
3. 证书链
一个完整的证书链应该由证书 + 中级证书A + 中级证书B + ... +根证书构成,所以通常,由CA签发的证书压缩包中会有1个或者多个中级证书,另外多家CA的中级证书在官网上有下载,关于合并中级证书请参考:SSL证书链不完整导致浏览器不受信任
二、安装部署
1、PFX/P12格式证书部署
对于通配符证书,我们建议部署PFX/P12格式证书,不受keystore证书容器影响,并且大多网络环境中会有Nginx的负载部署,部署PFX/P12证书将给整套应用系统部署带来便捷。方法是直接将带有私钥的pfx/p12证书放置在服务器指定路径,如下列代码中的/usr/local/ssl/server.pfx
,在迁移服务器或者配置一些负载时更为便捷操作。
注意:证书假定放置在/usr/local/ssl/server.pfx目录下
Tomcat中的server.xml配置代码如下:
<Connector port="8443" protocol="HTTP/1.1" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" keystoreFile="/usr/local/ssl/server.pfx" keystoreType="PKCS12" keystorePass="mypassword" clientAuth="false" sslProtocol="TLSv1+TLSv1.1+TLSv1.2" />
报错分析:
如果部署jar包时出现报错信息:Alias name [tomcat] does not identify a key entry at org.apache.tomcat.util.net.AbstratJsseEndpoint.createSSLContent
则务必检查使用keystore存储证书还是使用服务器绝对路径证书
2、Keystore密钥库部署
使用JDK自带的keytool工具进行证书导入x.509格式证书,命令行工具进入JDK的keytool目录,执行下述命令:
keytool -import -alias server -trustcacerts -file server.crt -trustcacerts -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit
%JAVA_HOME%
是指操作系统中的环境变量JAVA的环境目录,storepass指输入密码,java中cacerts证书库默认密码为changeit
将导入的jks证书复制服务器指定目录下
<Connector port="8443" protocol="HTTP/1.1" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" keystoreFile="/jks证书路径/名称.jks" keystorePass="证书密码" clientAuth="false" slProtocol="TLSv1+TLSv1.1+TLSv1.2" />
注意:
- 2018年6月30日起PCI DSS安全标准要求移除TLS1.0,参考禁用TLS1.0解决PCI DSS不合规问题解决方案
- -alias server的 server名称是制作CSR时生成的私钥文件名。
- 如果报错“java.lang.Exception: Input not an X.509 certificate”,请检查证书是否为x.509标准的证书(不含私钥、和中级证书)
3、总结
大多JAVA项目都会采用Nginx负载均衡,所以如果Web应用通过网关服务器(外网)分发的话,部署SSL证书则必须在网关服务器(外网)上部署SSL数字证书,所以通过建议通配符证书、多域名证书保留pfx证书。