本文介绍在Tomcat服务器上配置JKS(Java KeyStore)和PFX(也称为PKCS12)格式SSL证书的方法,包括证书文件的下载与上传、配置证书参数及安装后的验证步骤。
本文以安装在Linux操作系统中的Tomcat 7、8.5和9为例介绍。不同版本的操作系统或Web服务器,部署操作可能有所差异,如有问题,请联系产品技术专家进行咨询,详情请参见专家一对一服务。
前提条件
操作步骤
步骤一:下载SSL证书
登录数字证书管理服务控制台。在左侧导航栏选择 。
在SSL证书管理页面,定位需部署的目标证书,并确认以下信息:
在目标证书操作列单击更多进入证书详情页面,然后在下载页签中下载服务器类型为Tomcat的证书。
解压下载的证书压缩包,解压后包含一个证书文件(.pfx或.jks)和证书密码文件(.txt)。
说明选择证书格式时,应根据实际需求、资源和系统兼容性来决定。
JKS是Java专用的密钥库格式,适合主要在Java环境下使用,如果您的工具和脚本都支持JKS,建议选择JKS。
PFX是一种通用格式,被Java及其他平台广泛支持。如果需要跨不同技术栈或与非Java系统集成,建议选择PFX格式。
步骤二:在Tomcat服务器安装证书
登录 Linux 服务器。
阿里云服务器
以下操作以阿里云云服务器 ECS 为例进行说明,其他类型的服务器请参照对应产品文档进行操作。
登录ECS管理控制台,在页面左侧顶部,选择目标ECS实例所在地域。
在左侧导航栏中选择
,在实例页面找到目标ECS实例,点击操作列的远程连接。在弹出的对话框中,选择通过Workbench远程连接并单击立即登录。
选择终端连接作为连接方式,输入相关认证信息,并根据页面提示完成登录,即可进入服务器终端。详细操作请参考使用Workbench登录ECS实例。
说明若系统弹出“安全组白名单开通提示”面板,请按照页面提示单击一键添加。
其他云厂商服务器
请通过对应云厂商提供的远程连接功能登录服务器终端。
非云厂商服务器(如物理服务器、IDC托管主机等)
请在本地使用SSH工具登录服务器终端。
后续部分命令因操作系统类型不同而略有差异。请根据实际的服务器操作系统,选择对应的命令操作。
RHEL/CentOS 系列:包括 Alibaba Cloud Linux、Red Hat Enterprise Linux、CentOS、AlmaLinux、Rocky Linux、Anolis OS 及其衍生版本。
Debian/Ubuntu 系列:包括 Debian、Ubuntu 及其衍生版本。
开放安全组和防火墙的 443 端口。
在服务器终端执行以下命令,检测443端口的开放情况:
RHEL/CentOS 系列
command -v nc > /dev/null 2>&1 || sudo yum install -y nc # 请将以下的 <当前服务器的公网 IP> 替换为当前服务器的公网 IP sudo ss -tlnp | grep -q ':443 ' || sudo nc -l 443 & sleep 1; nc -w 3 -vz <当前服务器的公网 IP> 443
如果输出
Ncat: Connected to <当前服务器公网 IP>:443
,则表明443端口已开放。否则需在安全组和防火墙中开放443端口。Debian/Ubuntu 系列
command -v nc > /dev/null 2>&1 || sudo apt-get install -y netcat # 请将以下的 <当前服务器的公网 IP> 替换为当前服务器的公网 IP sudo ss -tlnp | grep -q ':443 ' || sudo nc -l -p 443 & sleep 1; nc -w 3 -vz <当前服务器的公网 IP> 443
若输出
Connection to <当前服务器公网 IP> port [tcp/https] succeeded!
或[<当前服务器公网 IP>] 443 (https) open
,则表明443端口已开放。否则需在安全组和防火墙中开放443端口。若端口未开放,可参照如下操作在安全组和防火墙中开放443端口。
将解压后的证书文件和密码文件上传到Tomcat服务器的conf目录。
说明Tomcat安装目录与您的服务器环境有关,您可以使用
sudo find / -iname "*tomcat*"
命令,查询Tomcat的安装目录。您可以使用远程登录工具附带的本地文件上传功能,上传文件。例如PuTTY、Xshell或WinSCP等。如果您使用的是阿里云云服务器 ECS,上传文件具体操作,请参见使用远程桌面或Windows APP向Windows实例传输文件或上传文件到Linux云服务器。
进入Tomcat安装根目录,执行以下命令,打开server.xml文件。
sudo vim ./conf/server.xml
按照以下示例以及注释说明配置server.xml。
重要为避免启动Tomcat时出现错误,请在复制代码时删除注释。
Tomcat各版本在配置SSL证书时步骤相似,但因支持的Java版本及配置文件格式有异,所以具体配置稍有不同,下面将分别介绍Tomcat 7、Tomcat 8.5和Tomcat 9这三个版本的配置方法。
Tomcat 9
请参照以下配置流程,配置端口转发、证书文件等。
配置项一:
配置示例:
<!-- 将Connector port修改为80,将redirectPort修改为SSL默认端口443,将HTTP请求转发到443端口。 --> <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" maxParameterCount="1000" />
配置项二。
配置示例(需去掉<!- - 和 - ->注释符):
PFX格式Tomcat9配置示例
<!-- 将Tomcat中默认的HTTPS端口修改为443。8443端口不可通过域名直接访问、需要在域名后加上端口号。 --> <!-- 443端口是HTTPS的默认端口,可通过域名直接访问,无需在域名后加端口号。 --> <!-- Connector port有两种运行模式NIO和APR,请选择NIO模式。--> <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" maxParameterCount="1000" > <SSLHostConfig> <!-- conf/domain_name.pfx请您替换为证书的实际路径,证书密码替换为证书密码文件pfx-password.txt中的内容 --> <Certificate certificateKeystoreFile="conf/domain_name.pfx" certificateKeystorePassword="xxxxxx" type="RSA" /> </SSLHostConfig> </Connector>
JKS格式Tomcat9配置示例
<!-- 将Tomcat中默认的HTTPS端口修改为443。8443端口不可通过域名直接访问、需要在域名后加上端口号。 --> <!-- 443端口是HTTPS的默认端口,可通过域名直接访问,无需在域名后加端口号。 --> <!-- Connector port有两种运行模式NIO和APR,请选择NIO模式。--> <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" maxParameterCount="1000" > <SSLHostConfig> <!-- conf/domain_name.jks请您替换为证书的实际路径,证书密码替换为证书密码文件pfx-password.txt中的内容 --> <Certificate certificateKeystoreFile="conf/domain_name.jks" certificateKeystorePassword="xxxxxx" type="RSA" /> </SSLHostConfig> </Connector>
配置项三:
配置示例(需去掉<!- - 和 - ->注释符):
<!-- 将redirectPort修改为443,让HTTPS请求转发到443端口。 --> <Connector protocol="AJP/1.3" address="::1" port="8009" redirectPort="443" maxParameterCount="1000" />
Tomcat 8.5
手动指定SSL的实现方式(指定使用JSSE实现方式)。
配置项:
配置示例(需去掉<!- - 和 - ->注释符):
PFX格式Tomcat8.5配置示例
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" maxParameterCount="1000"> <SSLHostConfig> <!-- conf/domain_name.pfx请您替换为证书的实际路径,证书密码替换为证书密码文件pfx-password.txt中的内容 --> <Certificate certificateKeystoreFile="conf/domain_name.pfx" certificateKeystorePassword="证书密码" type="RSA"/> </SSLHostConfig> </Connector>
JKS格式Tomcat8.5配置示例
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" maxParameterCount="1000"> <SSLHostConfig> <!-- conf/domain_name.jks请您替换为证书的实际路径,证书密码替换为证书密码文件jks-password.txt中的内容 --> <Certificate certificateKeystoreFile="conf/domain_name.jks" certificateKeystorePassword="证书密码" type="RSA"/> </SSLHostConfig> </Connector>
Tomcat 7
Tomcat服务器自动选择SSL的实现方式。如果按照该方式无法完成后续配置,可能是因为您的环境不支持自动选定的SSL实现方式。
配置项:
配置示例:
PFX格式Tomcat7配置示例
<!-- #port属性根据实际情况修改(HTTPS默认端口为443)。如果使用其他端口号,则您需要使用https://domain_name:port的方式来访问您的网站。 keystoreFile值需替换为证书的实际路径。 keystorePass值需替换为证书密码文件pfx-password.txt中的内容。 如需了解其他配置项,请前往Tomcat官网查看。--> <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true" scheme="https" secure="true" keystoreFile="conf/domain_name.pfx" keystoreType="PKCS12" keystorePass="证书密码" clientAuth="false" SSLProtocol="TLSv1.1+TLSv1.2+TLSv1.3" ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256"/>
JKS格式Tomcat7配置示例
<!-- #port属性根据实际情况修改(HTTPS默认端口为443)。如果使用其他端口号,则您需要使用https://domain_name:port的方式来访问您的网站。 keystoreFile值需替换为证书的实际路径。 keystorePass值需替换为证书密码文件jks-password.txt中的内容。 如需了解其他配置项,请前往Tomcat官网查看。--> <Connector port="443" protocol="HTTP/1.1" connectionTimeout="20000" redirectport="8443" maxParameterCount="1000" SSLEnabled="true" scheme="https" secure="true" keystoreFile="conf/domain_name.jks" keystoreType="JKS" keystorePass="证书密码" clientAuth="false" SSLProtocol="TLSv1.1+TLSv1.2+TLSv1.3" ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256"/>
可选:在/conf/web.xml文件,配置HTTP请求自动跳转HTTPS。
进入Tomcat安装根目录,执行以下命令,打开web.xml文件。
sudo vim ./conf/web.xml
在web.xml文件最底部添加以下配置项。
<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>
进入Tomcat的bin目录,执行以下命令验证配置文件的合法性。若输出
Configuration file test successful
表示验证通过。否则需根据提示重新修改配置,直至测试通过。./configtest.sh
进入Tomcat的bin目录,执行以下命令,停止并重启Tomcat。
停止命令
sudo ./shutdown.sh
重启命令
sudo ./startup.sh
步骤三:验证SSL证书是否安装成功
请通过 HTTPS 访问您已绑定证书的域名(如
https://yourdomain.com
,yourdomain.com
需替换为实际域名)。若浏览器地址栏显示安全锁图标,说明证书已成功部署。如访问异常或未显示安全锁,请先清除浏览器缓存或使用无痕(隐私)模式重试。
说明Chrome 浏览器自 117 版本起,地址栏中的
已被新的
替代,需单击该图标后查看安全锁信息。
如仍有问题,请参考常见问题进行排查。
后续步骤(可选)
开启域名监控
建议在证书部署完成后,为域名开启域名监控功能。系统将自动检测证书有效期,并在到期前发送提醒,帮助您及时续期,避免服务中断。具体操作请参见购买并开启公网域名监控。
常见问题
安装或更新证书后,证书未生效或 HTTPS 无法访问
常见原因如下:
域名未完成备案。请参见如何查看域名解析记录以及 ICP 备案信息。
服务器安全组或防火墙未开放 443 端口。请参见开放安全组和防火墙的 443 端口。
证书的绑定域名未包含当前访问的域名。请参见确认证书是否匹配目标域名。
修改 Tomcat 配置文件后,未重启Tomcat服务。具体操作可参见停止并重启Tomcat服务。
证书文件未正确替换,或 Tomcat 配置未正确指定证书路径。请检查 Tomcat 配置文件和所用证书文件是否为最新且有效。
域名已接入 CDN、SLB 或 WAF 等云产品,但未在相应产品中安装证书。请参阅云产品部署证书完成相关操作。
当前域名的 DNS 解析指向多台服务器,但证书仅在部分服务器上安装。需分别在每个服务器中安装证书。
如需进一步排查,请参考:根据浏览器错误提示解决证书部署问题 和 SSL证书部署故障自助排查指南。
如何更新(替换)Tomcat 中已安装的 SSL 证书
请先备份服务器上原有的证书文件(.pfx或.jks,以及.txt文件),然后登录数字证书管理服务控制台,下载新的证书文件,并上传到目标服务器覆盖原有文件(确保路径和文件名一致)。最后,重启Tomcat服务,使新证书生效。=