我成功地使用SSLconfiguration了tomcat,并使用了自签名证书。 最近出现了一个问题,就是让客户“接受/信任”我们的证书并不容易。 我们最终为该服务器购买了verisigin证书。
我已将新证书添加到密钥存储区的证书中。 我更新了tomcat的server.xml文件以使用别名来获取新的证书。 我已经重新启动了Tomcat和服务器。 每次我连接到服务器,我得到旧的证书。
Enviornment:
来自server.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" />
我甚至尝试改变密钥存储,通过将旧证书移动到不同的别名,并添加我的新的证书,旧的别名是什么。
我已经从多个浏览器和工作站尝试过了。 (清除我的caching。)
那么我需要做些什么才能让tomcat获取并提供新的证书?
更新:
在其中一个评论的build议之后清除tomcatscaching。
我停止了tomcat,删除了$ {CATALINA_HOME} / work并重新启动了tomcat。
它仍然在服务旧的证书。
更新2:
我查看了jakarta_service_date.log catalina.date.log manager.date.log stdout.date.log和stderr.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)
跟着一个堆栈跟踪。 其他应用程序抛出类似的例外。 这几个小时没有发生,我认为这是清除tomcatscaching的副作用。
这是另一个序列化错误:
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)
我们遇到了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" />
事实certificate,我在我的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" />
注意: keyAlias的第一个是大写。
原来,如果别名没有列出,它只是默默地服务于它在密钥存储中find的第一个密钥。