当前位置:首页 > 焦点

申请的ssl证书怎么部署到tomcat上

拿到CA签发的申请t上SSL证书,通常是证书一堆文件:域名证书(比如example.com.pem)、私钥(example.com.key),部署有时候还有个根证书链。申请t上别急着双击,证书Tomcat不认这套,部署它要的申请t上是PKCS12格式的keystore,或者JKS。证书

最省事的部署办法是用Java自带的keytool工具,把PEM格式转成PKCS12。申请t上命令长这样:

openssl pkcs12 -export -in example.com.pem -inkey example.com.key -out example.com.p12 -name tomcat -CAfile root.pem -caname root 

注意最后那个-CAfile参数,证书如果你的部署证书链文件是分开的(比如有个intermediate.crt),就得把根证书和中间证书拼成一个文件再传进去。申请t上拼的证书时候用cat命令,顺序别反了:先中间证书,部署再根证书。拼错顺序,Tomcat启动时会报“证书链不完整”的错,那叫一个头疼。

转完得到p12文件,扔到Tomcat的conf目录下。然后改server.xml。找到<Connector port="8443"那一行,默认是被注释掉的。把注释解开,改成这样:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true"> <SSLHostConfig> <Certificate certificateKeystoreFile="conf/example.com.p12" certificateKeystorePassword="你的密码" certificateKeystoreType="PKCS12" /> </SSLHostConfig> </Connector> 

这里有个坑,很多人直接复制网上的配置,把keystoreFile写成了绝对路径。绝对路径一旦换机器就废了。用相对路径conf/example.com.p12,Tomcat会自动基于CATALINA_BASE解析,稳妥得多。

保存后重启Tomcat。用https://你的域名:8443访问,浏览器地址栏应该出现小锁了。如果没出现,先看catalina.out日志,多半是密码错误或者证书格式不对。还有一种常见情况——你改了8443端口但防火墙没放行,那跟证书半毛钱关系没有,纯属网络问题。

要是你手头只有JKS格式的旧证书,转换思路也简单:keytool自带导入功能,但说实话,直接让运维重新签发一个PEM格式的更快,别在旧格式上折腾。

最后提一句,生产环境别用8443,直接改成443端口,用户访问不用敲端口号。改法就是上面配置里把port="8443"换成port="443",同时确保Tomcat以root权限运行(因为443是特权端口)。非root用户启动会报权限不足,这时候用authbind或者干脆加个iptables端口转发——但那是另一个话题了。

分享到: