对于初学者,我为 https 配置了我的 Tomcat8,并在连接器 xml 文件中链接了有效的证书。
像这样的东西:
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
SSLEnabled="true" maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" enableLookups="false" keyAlias="https"
keystoreFile="C:\Program Files\Apache Software Foundation\Tomcat 8.0\conf\keystore.jks"
keystorePass="changeit"/>
但我需要我的网络应用程序作为客户端连接到具有有效证书的第三方数据提供商。我把这个额外的证书放在哪里?当我为连接器放入密钥库时,“https”证书不是第一个证书,它会破坏东西。我可能可以用keyAlias
连接器中的属性来解决这个问题......
但是...连接器密钥库的应用范围是否广泛?这种设置的最佳选择是什么?
这篇文章几乎总结了我的选择,选择哪一个?最好的选择似乎是将带有两个证书的密钥库传递给 JVM,但是如何告诉连接器使用哪个证书?
编辑:
现在我得到:
Wrapped javax.net.ssl.SSLHandshakeException:
sun.security.validator.ValidatorException:
PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException:
unable to find valid certification path to requested target
Cause: sun.security.validator.ValidatorException: PKIX path building
failed: sun.security.provider.certpath.SunCertPathBuilderException:
unable to find valid certification path to requested target]
在我们的环境(tomcat7)中,如果我们使用 java 密钥库,那么我们的连接器如下所示:
区别是
${catalina.base}
(在我们的例子中/opt/tomcat/)而不是${user.home}/
, 和你提到的keyAlias
.如果要将密钥导入密钥库,可以这样做(当 tomcat 是客户端在 ADFS 进行身份验证时,我们使用它):
我认为使用密钥库,
${catalina.base}
您keyAlaias
应该能够解决您的问题。最后,我创建了一个包含所有必要证书(密钥)和别名的密钥库(在 Windows 上使用密钥库资源管理器)。然后我填写了 keystore 和 trustore 作为 java VM 启动参数:
在 tomcat 连接器中使用相同的密钥库,并为 HTTPS 使用适当的 keyAlias。
调试时启用
-Djava.net.debug=ssl
也很有帮助。