Tomcat部署SSL证书无效问题排查求助
问题:Tomcat部署SSL后浏览器提示证书无效(Issuer显示错误)
环境与现状
- Windows企业服务器Tomcat,Java/Angular应用HTTP远程访问正常
- 已获取CA证书并生成
mycert.jks,放置于Tomcat\conf目录,server.xml的Connector配置如下:
<Connector port="xxx" maxHttpHeaderSize="8192" maxThreads="100" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" acceptCount="100" scheme="https" secure="true" SSLEnabled="true" clientAuth="false" sslProtocol="TLS" keyAlias="myalias" keystoreFile="conf\mycert.jks" keystorePass="mypass" />
- 通过
https://10.10.100.10/myapp访问时应用可加载,但浏览器提示「Not secure - Certificate is not valid」;Issued To的通用名、有效期等信息正确,服务器时间正常,证书未过期。
证书详情(更新)
Issued To Common Name (CN) mycn Organization (O) myorg Organizational Unit (OU) <Not Part Of Certificate> Issued By Common Name (CN) mycn Organization (O) myorg Organizational Unit (OU) <Not Part Of Certificate> Validity Period Issued On Tuesday, September 26, 2023 at 9:38:18AM Expires On Monday, December 25, 2023 at 9:38:18AM Fingerprints SHA-256 Fingerprint XX XX XX XX XX XX... SHA-1 Fingerprint XX XX XX XX XX XX...
重新生成证书后的操作(更新2)
- 使用以下命令生成.jks和.csr文件:
keytool -genkey -alias myservername -keyalg RSA -keysize 2048 -keystore myservername.jks -dname "CN=myservername, O=MyOrg, L=, ST=, C=" && keytool -certreq -alias myservername -file myservername.csr -keystore myservername.jks
- 执行
keytool -list -keystore myservername.jks得到:
myservername, Oct 20, 2023, PrivateKeyEntry, Certificate fingerprint (SHA-256): xxxxxxxx
- 将
myservername.csr提交给CA,获取证书内容保存为myservername.cer;证书路径为rootcertname > intermediatecertname > myservername,导出根证书和中间证书为rootcertname.cer、intermediatecertname.cer,导入到keystore:
keytool -keystore myservername.jks -import -alias root -trustcacerts -file rootcertname.cer keytool -keystore myservername.jks -import -alias intermediate -trustcacerts -file intermediatecertname.cer
- 再次执行
keytool -list -keystore myservername.jks确认已包含私钥、根证书和中间证书,但访问时仍提示证书无效。
重要发现
查看证书时,Issuer名称显示为myservername(私钥别名),而非CA证书名称。
问题原因与解决步骤
核心原因
生成CSR后,未将CA签发的服务器证书导入到对应私钥的别名下。当前keystore里的myservername条目仍是自签名证书(Issuer与Subject一致),CA签发的证书并未替换它,导致Tomcat加载的还是自签名证书,浏览器判定无效。
正确操作步骤
- 确认已获取CA签发的服务器证书文件(如
myservername.cer) - 执行以下命令,将CA签发的服务器证书导入到
myservername别名对应的私钥条目下:
keytool -import -alias myservername -keystore myservername.jks -file myservername.cer
注意:
alias必须与生成私钥时的别名完全一致,这样keytool才会将CA证书与已存在的私钥绑定,替换原来的自签名证书。
验证导入结果:执行
keytool -list -v -keystore myservername.jks -alias myservername,查看Issuer字段是否显示CA的名称(而非myservername)重启Tomcat,重新访问
https://10.10.100.10/myapp检查证书状态。
额外注意事项
- 确保Connector配置中的
keyAlias与keystore里绑定了CA证书的私钥别名一致(此处应为myservername) - 若CA提供的是链式证书(包含中间和根),可直接导入链式证书文件到对应别名下,无需单独导入中间和根(单独导入也可,只要服务器证书正确绑定私钥)
内容的提问来源于stack exchange,提问作者jkfe
相关产品推荐
相关产品推荐

