我有一个Java Web项目,并且使用了很少的证书来联系URL。现在,我已将项目作为WAR文件部署在Unix服务器中,并且我的项目存在证书问题。

我的证书存储在本地存储中,需要将它们放入Unix服务器中,并将它们添加到Tomcat中的keytool中。我怎么做。

我可以举个例子,怎么用keytool做到这一点?

最佳答案

至少有3种方法可以解决此问题:


您可以将证书导入到JRE的默认信任库中(通常在$JAVA_HOME/lib/security/cacerts中)。这将影响使用该JRE的所有应用程序(除非它们覆盖默认设置)。您也需要对该cacerts文件具有写权限才能执行此操作。
您可以将证书导入本地密钥库,将其配置为Tomcat的默认信任库。通常,您可以复制默认的cacerts文件并将证书导入到该副本中,也可以创建新的密钥库并仅导入所需的证书(keytool -import -keystore ...将创建密钥库文件,如果没有不存在)。这可以在tomcat中通过在catalina.sh(或.bat)中设置其他系统属性来完成:在JAVA_OPTS中,您可以添加例如-Djavax.net.ssl.trustStore=/path/to/local/truststore.jks(以及其他相关属性)。
您可以使该证书仅由应用程序中的某些连接使用(或以编程方式设置默认的SSLContext)。为此,您将需要更改应用程序,以便它加载密钥库,并使用它来初始化TrustManagerFactory,并传入SSLContext中。然后,如何使用SSLContext取决于您使用的客户端库。 this answer中有一个示例。


无论哪种方式,您都可以使用以下方法将您的证书(无论是CA证书还是特定的服务器证书)导入所选的信任库中:

keytool -import -file cert.pem -alias "some name" -keystore truststore.jks


(如果使用编程路线,还可以在内存中创建密钥库,并动态加载证书文件,如this answer所示。使用密钥库可能会更容易,这取决于您要评估部署的优缺点。使用。)

10-08 06:43
查看更多