簡體   English   中英

使用 Tomcat 的密鑰庫在 Tomcat 中進行 SSL 客戶端調用

[英]Make SSL client call in Tomcat using Tomcat's keystore

我有一個在 Tomcat 中運行的 Web 應用程序,它正在向另一個系統發出 Web 服務調用。 我需要使用 SSL 和客戶端身份驗證來保護此調用。 我托管的 Tomcat 已經正確配置了特定於環境的信任庫和密鑰庫,因此我需要使用這些存儲庫來保護我自己的調用。 這就是我被困的地方。

如何找到配置 Tomcat 以進行我自己的 SSL 調用的密鑰庫和信任庫? 或者更好的是,使用這些值生成正確配置的 SSLContext 或 SSLSocketFactory?

我嘗試過的事情:

  1. 我嘗試依賴 SSLContext.getDefault()。 這似乎沒有設置。

  2. 我嘗試依賴系統屬性:

     System.getProperty("javax.net.ssl.trustStore"); System.getProperty("javax.net.ssl.trustStorePassword"); System.getProperty("javax.net.ssl.trustStoreType"); System.getProperty( "javax.net.ssl.keyStore"); System.getProperty( "javax.net.ssl.keyStorePassword"); System.getProperty("javax.net.ssl.keyStoreType");

但這似乎是一個脆弱的解決方案,因為 Tomcat 不必配置系統屬性。 在其中一個測試環境中,設置了信任存儲信息,但未設置密鑰存儲變量。 它們在 Tomcat 的 server.xml 中定義。

有沒有一些簡單的方法可以做到這一點,我忽略了?

更新:

這個問題很相似,其中一個答案指出 SSL 可以由 OpenSSL\\APR 處理,因此這里的任何解決方案都將在很大程度上取決於 Tomcat 的配置方式。 假設 JSSE,解決方案似乎是:

  • 確保通過系統屬性配置了 Tomcat。
  • 讓商店位於服務器上的預定義位置。
  • 在您的戰爭中打包您自己的商店副本。

對於上面的前兩個,您必須確保安全策略允許訪問這些文件。

這些真的是我想要做的事情的最佳實踐嗎?

我認為除其他事項外,您還混淆了入站和出站 SSL 連接。 Server.xml 包含入站 SSL 設置。

在 Java 中使用出站 SSL 時,應在 Tomcat 啟動時顯式設置 javax.net.ssl.trustStore* 和 javax.net.ssl.keyStore*。 請記住,除非您編寫自己的密鑰管理器,否則默認情況下密鑰庫只能包含一個私鑰。

大多數著名的 Web 服務庫使用標准 HTTP 庫,這些庫使用 HTTPConnection/HTTPSConnection 或 Jakatta HTTPClient,如果服務器請求,將從密鑰庫中提供客戶端證書。 您不需要創建自己的 SSLContext。

如果您要終止入站 Web 服務調用,那么我會在需要時使用帶有 SSL 和客戶端身份驗證的 Apache HTTP Server。

為清楚起見進行編輯: javax.net.ssl.keyStore指定的密鑰庫可以包含多個私鑰/證書對,但除非您編寫自己的KeyManager否則您將無法使用其他私鑰/證書。 當您在 Tomcat 中終止入站 SSL 連接時,這可能是一個問題 - 您將需要一個用於外部入站連接的私鑰/證書和另一個用於出站連接的私鑰/證書。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM