我構建了一個 CXF 客戶端來呼叫 SOAP Web 服務。我將服務器的證書匯入到我的 cacerts 信任庫中(我知道 CXF 默認使用 cacerts)并且我使用以下代碼來實作呼叫。但是,會生成以下錯誤:
sun.security.validator.ValidatorException:PKIX 路徑構建失敗:sun.security.provider.certpath.SunCertPathBuilderException:無法找到請求目標的有效認證路徑
QName serviceQName = new QName("Namespace", "ServiceName");
String urlString = "https:endpoint?wsdl";
QName portQName = new QName("Namespace", "PortName");
service = Service.create(serviceQName);
service.addPort(portQName, SOAPBinding.SOAP11HTTP_BINDING, urlString);
Dispatch<Source> sourceDispatch = service.createDispatch(portQName, Source.class, Service.Mode.PAYLOAD);
BindingProvider bindingProvider = sourceDispatch;
bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, urlString);
Source result = sourceDispatch.invoke(new StreamSource(exchange.getIn().getBody(InputStream.class)));
uj5u.com熱心網友回復:
您需要將證書匯入密鑰庫。這個答案是一個常見的解決方案。
“PKIX 路徑構建失敗”和“無法找到到請求目標的有效認證路徑”
還可以嘗試將密鑰庫和信任庫路徑和密碼添加到 VM 選項。
-Djavax.net.ssl.keyStore=C:\...\keystore.jks
-Djavax.net.ssl.keyStorePassword=password
-Djavax.net.ssl.trustStore=C:\..\truststore.jks
-Djavax.net.ssl.trustStorePassword=password
-Djavax.net.ssl.type=JKS
uj5u.com熱心網友回復:
該錯誤實際上是 CXF 錯誤,而不是證書錯誤。具體來說,Binding Provider 實際上忽略了 JAXWS 屬性,我必須傳遞 SSL 背景關系,如下所示:
SSLContext sc = "your custom SSL Context"
TLSClientParameters tlsParams = new TLSClientParameters();
tlsParams.setUseHttpsURLConnectionDefaultSslSocketFactory(false);
tlsParams.setSSLSocketFactory(sc.getSocketFactory());
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/405221.html
標籤:
上一篇:IIS證書在系結上自動創建和更改
