簡體   English   中英

在 Rest web 服務中使用 https

[英]Using https in Rest web service

我有一個 Rest web 服務在 java 中開發,glassfish,在 ZCDC872DB616AC618ADB3316 服務器上運行。

我們最近選擇使用 https 協議,並在部署時通過 glassfish 本身提供的測試證書(端口 8181)開始測試。

使用 Postman 進行測試我只需要禁用配置中的一個選項:“SSL 證書驗證”。

但是,在 java 中使用我的服務 service destop 的模塊開始拋出異常。

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

在測試環境中,windows,下面幾行糾正了問題,已經在生產中,數百,無法解決。

String certificatesTrustStorePath = "/etc/alternatives/jre_1.8.0/lib/security/cacerts";
System.setProperty("javax.net.ssl.trustStore", certificatesTrustStorePath); System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

centos中的錯誤是下面帖子中出現的錯誤,已經閱讀了各種原因但無法解決。

錯誤 - trustAnchors 參數必須為非空

如果你知道如何在 linux 中解決我很感激,但問題不是這個......

我發布的這些行是否指定了 cacerts 文件的位置(以及在我的平台證書中)? 但在我看來這是錯誤的......我已經使用了第三方 https rest 服務,並且從未指定證書路徑......這需要我在結構上了解第三方服務器的一些細節。 我錯了嗎?

所以,我想必須有另一種方法來做到這一點......有人可以幫忙嗎?

是的,您的代碼為存在 ssl 證書的信任庫指定了自定義路徑。 這是與用於握手的 https 協議相對應的共享公鑰(自簽名或由列入白名單的 CA 簽名)。 這些存儲的默認路徑是

$JAVA_HOME/jre/lib/security/cacerts

雖然上面可以被覆蓋。 因此,在您的代碼中,您已經覆蓋了路徑,將其指向公鑰(證書)已經存在的位置。 因此它對你有用。 Truststore 只是公鑰的集合。

或者,您也可以在默認信任庫中導入公鑰以使其正常工作。 在這種情況下,您不必顯式設置不同的信任庫。

有很多方法可以做到這一點。 將您的文件復制到$java_home\jre\lib\security\cacerts\ ,而不必手動設置屬性。

您還可以在運行時使用

-Djavax.net.ssl.trustStore=/home/user/SSL/mycacerts -Djavax.net.ssl.keyStore=/home/user/SSL/serverkeystore.jks

暫無
暫無

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

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