为什么 tomcat 没有提供正确的 SSL 证书

为什么 tomcat 没有提供正确的 SSL 证书

我成功地为 tomcat 配置了 SSL,并使用了自签名证书。最近出现了一个问题,让客户端“接受/信任”我们的证书并不容易。我们最终为该服务器购买了 verisigin 证书。

我已将新证书添加到密钥库中的证书中。我已更新 tomcat 的服务器.xml文件以使用新证书的别名。我已重新启动 Tomcat 和服务器。每次连接到服务器时,我都会获得旧证书。

环境:

  • Windows 2008 R2 - 64 位
  • Tomcat 6.0.29 - 作为服务安装
  • Java 1.6.0_23

连接器服务器.xml:

<Connector port="443" maxThreads="150" 
           scheme="https" secure="true" SSLEnabled="true"
           keystoreFile="keystore.keys" keyalias="webapps2013"
           keystorePass="Redacted"             
           clientAuth="false" sslProtocol="TLS" protocol="HTTP/1.1" />

我甚至尝试更改密钥库,将旧证书移动到不同的别名,并在旧别名中添加我的新证书。

我已从多个浏览器和工作站尝试过。(也清除了我的缓存。)

那么我需要做什么才能让 tomcat 获取并提供我的新证书?

更新:
按照评论中一条建议清除 tomcat 缓存的建议,
我停止了 tomcat,删除了 ${CATALINA_HOME}/work,然后重新启动了 tomcat。
它仍在提供旧证书。

更新2:
我看过了jakarta_service_date.log catalina.date.log 经理.日期.日志 标准输出日期日志标准错误日志我没有看到任何证书错误。尽管我看到了有关会话序列化的奇怪错误。

Dec 11, 2013 10:46:27 AM org.apache.catalina.session.StandardManager doUnload
SEVERE: IOException while saving persisted sessions: java.io.FileNotFoundException: 
C:\Tomcat6.0\work\Catalina\localhost\RCSLIBRRunner\SESSIONS.ser (Access is denied)
java.io.FileNotFoundException: C:\Tomcat6.0\work\Catalina\localhost\RCSLIBRRunner\SESSIONS.ser (Access is denied)

随后是堆栈跟踪。其他应用程序也抛出了类似的异常。几个小时内都没有发生过这种情况,我认为这是清除 tomcat 缓存的副作用。

这是另一个序列化错误:

Dec 11, 2013 10:46:27 AM org.apache.catalina.session.StandardManager stop
SEVERE: Exception unloading sessions to persistent storage
java.io.FileNotFoundException: C:\Tomcat6.0\work\Catalina\localhost\RCSLIBRRunner\SESSIONS.ser (Access is denied)

答案1

我们在使用 时遇到了麻烦protocol="HTTP/1.1",日志中出现了错误。我们的错误是

证书文件已指定或文件格式无效

基于一些“谷歌研究“,我们改用这个protocol

protocol="org.apache.coyote.http11.Http11NioProtocol"

我们的Connector如下:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
    SSLEnabled="true"
    maxThreads="150" 
    scheme="https" 
    secure="true"
    keystoreFile="/path/to/keystore"
    keystorePass="******"
    clientAuth="false" 
    sslProtocol="TLS" />

答案2

原来我的Connector

它应该是:

<Connector port="443" maxThreads="150" 
           scheme="https" secure="true" SSLEnabled="true"
           keystoreFile="keystore.keys" keyAlias="webapps2013"
           keystorePass="Redacted"             
           clientAuth="false" sslProtocol="TLS" protocol="HTTP/1.1" />

笔记:中的第一个 akeyAlias大写。

事实证明,如果未列出别名,它只会默默地提供在密钥库中找到的第一个密钥。

相关内容