You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat加载TrustCor SSL证书报错求助:error:0909006C

解决方案与排查方向

核心错误分析

原错误error:0909006C:PEM routines:get_name:no start line是因为Apr连接器尝试从证书链PEM文件中加载私钥,但该文件仅包含证书(无私钥);后续改用密钥库的配置,可能存在密钥库类型与Apr连接器兼容性问题。


具体排查与修复步骤

1. 切换到NIO连接器(最直接的Java密钥库兼容方案)

Apr连接器依赖OpenSSL,对Java密钥库(JKS/PKCS12)的支持不如NIO原生:

  • 修改server.xml中的Apr监听器,注释或删除:
    <!-- <Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener" useAprConnector="true"/> -->
    
  • 修改HTTPS Connector的protocol为NIO,并修正密钥库类型(你最初生成的是JKS,不是PKCS12):
    <Connector SSLEnabled="true" discardFacades="true" maxThreads="100" port="8443"
      protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https" secure="true"
      defaultSSLHostConfigName="rickcygnusx1.ddns.net">
      <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol"/>
      <SSLHostConfig hostName="rickcygnusx1.ddns.net">
       <Certificate certificateKeystoreFile="d:/rickcygnusx1.ddns.net"
                    certificateKeystorePassword="xxxxxxx"
                    certificateKeystoreType="JKS"
                    certificateKeyAlias="xxxxxx" />
      </SSLHostConfig>
    </Connector>
    
  • 启动Tomcat测试,NIO连接器对Java密钥库的支持更稳定。

2. 验证密钥库的有效性

用keytool确认密钥库中存在完整的私钥和证书链:

keytool -list -v -keystore d:\rickcygnusx1.ddns.net -alias xxxxxx
  • 确认输出中包含PrivateKeyEntry(表示私钥存在)
  • 确认证书链长度≥2(包含你的域名证书和TrustCor的中间/根证书)

3. 若坚持使用Apr连接器,需导出单独的私钥PEM

Apr连接器需要单独的私钥文件(不能从密钥库直接读取):

  1. 将原有JKS密钥库转换为PKCS12格式(方便OpenSSL导出):
    keytool -importkeystore -srckeystore d:\rickcygnusx1.ddns.net -destkeystore d:\rickcygnusx1.p12 -deststoretype PKCS12
    
  2. 用OpenSSL导出私钥到PEM文件:
    openssl pkcs12 -in d:\rickcygnusx1.p12 -nocerts -out d:\private.key
    
    • 输入PKCS12密码后,设置私钥保护密码(或直接回车跳过,不推荐生产环境)
  3. 确保私钥PEM以-----BEGIN PRIVATE KEY-----开头,然后修改Connector配置:
    <Connector SSLEnabled="true" discardFacades="true" maxThreads="100" port="443"
      protocol="org.apache.coyote.http11.Http11AprProtocol" scheme="https" secure="true">
      <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol"/>
      <SSLHostConfig hostName="rickcygnusx1.ddns.net">
       <Certificate certificateFile="D:/apache-tomcat-9.0.40/conf/your_domain_cert.pem" <!-- 单独的域名证书PEM -->
                    certificateKeyFile="D:/apache-tomcat-9.0.40/conf/private.key"
                    certificateChainFile="D:/apache-tomcat-9.0.40/conf/rickcygnusx1_ddns_net.pem"
                    hostName="rickcygnusx1.ddns.net"/>
      </SSLHostConfig>
    </Connector>
    

    注:单独的域名证书可从NoIP重新下载,或从密钥库导出:

    keytool -exportcert -alias xxxxxx -file d:\your_domain_cert.pem -keystore d:\rickcygnusx1.ddns.net
    

4. 修正文件路径与权限

  • Windows路径使用正斜杠/或双反斜杠\\,避免XML转义问题,比如D:\xxx改为D:/xxx
  • 确保Tomcat运行账户(或当前登录用户)拥有密钥库/PEM文件的读取权限,右键文件 → 属性 → 安全 → 添加权限

5. 版本兼容性检查

  • 升级Tomcat 9到最新稳定版(9.0.80+),修复旧版本中的SSL兼容性bug
  • 确认Java 17的环境变量配置正确,Tomcat启动时使用的是指定的Java 17

内容的提问来源于stack exchange,提问作者ricardo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 19:40:29