Ssl

當應用程序充當客戶端時,將證書放在 Tomcat 的什麼位置?

  • May 24, 2018

對於初學者,我為 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]

最後,我創建了一個包含所有必要證書(密鑰)和別名的密鑰庫(在 Windows 上使用密鑰庫資源管理器)。然後我填寫了 keystore 和 trustore 作為 java VM 啟動參數:

 -Djavax.net.ssl.keyStore=%KEYSTORE% 
 -Djavax.net.ssl.keyStorePassword=changeme
 -Djavax.net.ssl.trustStore=%TRUSTSTORE% 
 -Djavax.net.ssl.trustStorePassword=changeme

在 tomcat 連接器中使用相同的密鑰庫,並為 HTTPS 使用適當的 keyAlias。

調試時啟用-Djava.net.debug=ssl也很有幫助。

在我們的環境(tomcat7)中,如果我們使用 java 密鑰庫,那麼我們的連接器如下所示:

<Connector SSLEnabled="true"
   acceptCount="100"
   connectionTimeout="20000"
   executor="tomcatThreadPool"
   keyAlias="tomcat"
   keystoreFile="${catalina.base}/conf/tomcat.keystore"
   keystorePass="changeme"
   maxKeepAliveRequests="15"
   port="443"
   protocol="org.apache.coyote.http11.Http11Protocol"
   redirectPort="8443"
   scheme="https"
   secure="true"/>  

區別是${catalina.base}(在我們的例子中*/opt/tomcat/*)而不是 ${user.home}/, 和你提到的keyAlias.

如果要將密鑰導入密鑰庫,可以這樣做(當 tomcat 是客戶端在 ADFS 進行身份驗證時,我們使用它):

keytool -importcert -file cert.cer -keystore tomcat.keystore -alias myalias

我認為使用密鑰庫,${catalina.base}keyAlaias應該能夠解決您的問題。

引用自:https://serverfault.com/questions/845141