Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在很多场合下被普遍使用,Tomcat支持pfx(p12)格式部署和keystore (kjs)方式部署SSL数字证书,详细如下:

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在很多场合下被普遍使用,Tomcat支持pfx(p12)格式部署和keystore (kjs)方式部署SSL数字证书,详细如下:

tomcat 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签发的证书需要购买数字证书,最低¥39/年的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证书。

相关文章