Ключи SSL и аутентификация клиента в Java - PullRequest
1 голос
/ 09 мая 2011

Я подключаюсь к аутентификации клиента SSL веб-службы, настроил хранилище ключей:

System.getProperties().setProperty("javax.net.ssl.keyStore", 
                                  "d:/banking/BankClient/classes/xxcompany/bank/certificate/keystore.jks");
System.getProperties().setProperty("javax.net.ssl.keyStorePassword","password");  

При звонке в веб-сервис:

GetAccountBalanceResponse resp = services.getAccountBalance(request);

Я получаю следующую ошибку

WARNING:Cannot connecti with url: https://[redacted] ; reason: javax.xml.soap.SOAPException: Message send failed: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Exception in thread "main" java.rmi.RemoteException: ; nested exception is: 
    HTTP transport error: javax.xml.soap.SOAPException: javax.xml.soap.SOAPException: Message send failed: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at xxcompany.bank.proxy.runtime.ServicesBinding_Stub.getAccountBalance(ServicesBinding_Stub.java:146)
    at xxcompany.bank.proxy.ServicesPortClient.getAccountBalance(ServicesPortClient.java:48)
    at xx.bank.client.main(client.java:111)
Caused by: HTTP transport error: javax.xml.soap.SOAPException: javax.xml.soap.SOAPException: Message send failed: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at oracle.j2ee.ws.client.http.HttpClientTransport.invokeImpl(HttpClientTransport.java:174)
    at oracle.j2ee.ws.client.http.HttpClientTransport.invoke(HttpClientTransport.java:150)
    at oracle.j2ee.ws.client.StreamingSender._sendImpl(StreamingSender.java:176)
    at oracle.j2ee.ws.client.StreamingSender._send(StreamingSender.java:113)
    at xxcompany.bank.proxy.runtime.ServicesBinding_Stub.getAccountBalance(ServicesBinding_Stub.java:130)
    ... 2 more

Хранилище ключей содержит личный сертификат для клиента, сертификат действителен и отлично работает при использовании в браузере. Как мне это исправить?

Большое спасибо.

1 Ответ

3 голосов
/ 09 мая 2011

Эта ошибка возникает, когда CA, подписавший сертификат сервера, не является одним из известных CA или общедоступный сертификат CA отсутствует в хранилище доверенных сертификатов клиента.Чтобы обойти это, вам нужно добавить общедоступный сертификат CA в хранилище доверенных сертификатов клиента.

См. невозможно найти действительный путь сертификации к запрошенной цели и Больше нет 'невозможно найти действительный путь сертификации к запрошенной цели' для подробных инструкций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...