【问题标题】:SSL between 2 Tomcat servers2 个 Tomcat 服务器之间的 SSL
【发布时间】:2026-02-10 20:25:02
【问题描述】:

我目前正在尝试配置 2 个 Tomcat,一个带有 CAS,另一个带有 Liferay。 我已经使用 OpenSSL 为 CAS 服务器创建了一个证书,当 Liferay 将我重定向到浏览器中的 CAS 页面登录时会显示该证书,但是当 CAS 将我重定向回 Liferay 时(当 Liferay 尝试验证 CAS 创建的票证时) ),我只得到一个漂亮的白页,Liferay 服务器显示“无法找到请求目标的有效认证路径”。 我尝试使用 keytool 创建证书,或者将其添加到传递给 Liferay 的自定义信任库中,但一切都让我失败。

也许你们可以帮忙?

谢谢。

更新:我用wireshark查看了SSL流量,似乎liferay不使用ssl来验证CAS票证,这解释了为什么它可以验证证书,因为信任库是在SSL连接器中定义的...... 但是不知道怎么解决

【问题讨论】:

  • 您是否在 Liferay Portal 的 Tomcat 的 server.xml 中指定了属性“truststoreFile”?您的证书应导入该信任库文件。您能否也发布您获得的异常的整个堆栈跟踪?
  • 所以现在我为 Liferay 服务器指定了一个 truststoreFile 和一个密码,我有一个错误告诉我我的 keystore 已损坏,所以我想我必须让 tomcat 查看特定的 keystoreFile,但是做我必须为它创建一个新的吗?然后为 CAS 服务器创建另一个自定义信任库?

标签: tomcat liferay cas


【解决方案1】:

对于自签名证书,您应该在 server.xml 中指定 SSL-connector 的属性“truststoreFile”:

<Connector port="8443" sslProtocol="TLS" scheme="https" clientAuth="false" 
...
keystoreFile="tomcat.keystore" keystorePass="password" keyAlias="tomcat"

<!-- Here's attribute "truststoreFile" -->
truststoreFile="%JAVA_HOME%/jre/lib/security/cacerts"
... />

尝试使用位于“%JAVA_HOME%/jre/lib/security/cacerts”中的通用信任库文件。您应该使用 keytool 命令将您的证书导入到该信任库文件:

keytool -import -file tomcat.crt -alias tomcat -keystore %JAVA_HOME%/jre/lib/security/cacerts

默认密码是“changeit”。 server.xml 中的&lt;connector /&gt; 标签中不需要指定默认密码。

【讨论】:

  • 我必须为 Liferay 服务器创建另一个密钥库吗?感谢您的回答。
  • 如果您的两个 Tomcat 共享相同的域名,您可以为两个 Tomcat 使用一个证书(因此一个密钥库)。如果域名不同,您应该为每个域名生成两个证书(但您可以将两个证书放在一个密钥库中)。
  • 现在(出于测试目的)两个 tomcat 都在我的本地主机上,所以我可以使用相同的密钥库,如果这样做,我必须为两者指定一个信任库(最终可以是两者也一样)?
  • 是的,您应该有一个“localhost”证书,一个带有此证书的密钥库,以及一个信任库,例如 JVM“cacerts”。
  • Ok 创建了一个新的新密钥库、一个自定义信任库和一个证书,如 docs.oracle.com/javase/1.4.2/docs/guide/security/jsse/… 中指定的那样 两个连接器都是这样的(端口号除外): 仍然得到“请求目标的路径”错误