Ошибка SSL: невозможно найти действительный путь сертификации для запрошенной цели

Я пытаюсь подключиться к URL через мой сервер, который требует сертификат. Я импортировал свой сертификат аутентификации клиента в {JAVA_HOME}/jre/bin/security/cacerts, а также поместил его в хранилище ключей в Jboss/bin и jboss/server/conf/, затем перезапустил свой сервер, и он все еще дает мне следующая ошибка.

Caused by: java.io.IOException: Could not transmit message
    at org.jboss.ws.core.client.HTTPRemotingConnection.invoke(HTTPRemotingConnection.java:265)
    at org.jboss.ws.core.client.SOAPProtocolConnectionHTTP.invoke(SOAPProtocolConnectionHTTP.java:71)
    at org.jboss.ws.core.CommonClient.invoke(CommonClient.java:340)
    at org.jboss.ws.core.jaxws.client.ClientImpl.invoke(ClientImpl.java:290)
    ... 40 more
Caused by: org.jboss.remoting.CannotConnectException: Can not connect http client invoker after 1 attempt(s)
    at org.jboss.remoting.transport.http.HTTPClientInvoker.makeInvocation(HTTPClientInvoker.java:249)
    at org.jboss.remoting.transport.http.HTTPClientInvoker.transport(HTTPClientInvoker.java:161)
    at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:165)
    at org.jboss.remoting.Client.invoke(Client.java:1724)
    at org.jboss.remoting.Client.invoke(Client.java:629)
    at org.jboss.ws.core.client.HTTPRemotingConnection.invoke(HTTPRemotingConnection.java:243)
    ... 43 more
Caused by: 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
    at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1611)
    at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:187)
    at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:181)
    at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1035)
    at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:124)
    at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:516)
    at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:454)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:884)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1112)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1139)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1123)
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:904)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:230)
    at org.jboss.remoting.transport.http.HTTPClientInvoker.getOutputStream(HTTPClientInvoker.java:1214)
    at org.jboss.remoting.transport.http.HTTPClientInvoker.useHttpURLConnection(HTTPClientInvoker.java:334)
    at org.jboss.remoting.transport.http.HTTPClientInvoker.makeInvocation(HTTPClientInvoker.java:231)
    ... 48 more
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:294)
    at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:200)
    at sun.security.validator.Validator.validate(Validator.java:218)
    at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:126)
    at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:209)
    at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249)
    at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1014)
    ... 62 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174)
    at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:289)
    ... 68 more

Я хочу спросить, что я могу сделать, чтобы это исправить? Нужно ли поместить еще один из них в server.xml для этого сертификата:

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150"
   scheme="https" secure="false" strategy="ms" address="${jboss.bind.address}"
   keystoreFile="${jboss.server.home.dir}/conf/.keystore"
   keystorePass="changeit" sslProtocol="TLS"
   truststoreFile="/usr/lib/jvm/java-6-sun-1.6.0.10/jre/lib/security/cacerts"
   truststorePass="*****"
   SSLImplementation="org.jsslutils.extra.apachetomcat6.JSSLutilsImplementation"
   acceptAnyCert="true" clientAuth="want" />

или я делаю другую ошибку?

5 ответов

Я знаю, что вы сказали, что уже импортировали сертификат, но посмотрите на эти шаги, чтобы увидеть, пропустили ли вы где-нибудь шаг:

Вот общая сводка того, как импортировать сертификаты, чтобы исправить следующую ошибку:

Ошибка при попытке выполнить запрос. javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: сбой построения пути PKIX: sun.security.provider.certpath.SunCertPathBuilderException: невозможно найти действительный путь сертификации для запрошенной цели

Как импортировать сертификаты

  1. Перейдите по URL в вашем браузере, нажмите на цепочку сертификатов HTTPS (маленький символ блокировки рядом с URL-адресом), чтобы экспортировать сертификат
    • Нажмите "Подробнее" > "Безопасность" > "Показать сертификат" > "Детали" > "Экспорт..".
    • Сохранить как .der
    • Повторите для любых сертификатов, которые вам нужно импортировать
  2. Найдите$JAVA_HOME/jre/lib/security/cacerts
  3. Импортируйте все файлы *.der в файл cacerts, используя следующее:

    sudo keytool -import -alias mysitestaging -keystore $JAVA_HOME/jre/lib/security/cacerts -file staging.der
    sudo keytool -import -alias mysiteprod -keystore  $JAVA_HOME/jre/lib/security/cacerts -file prod.der
    sudo keytool -import -alias mysitedev -keystore  $JAVA_HOME/jre/lib/security/cacerts -file dev.der
    
  4. Пароль хранилища ключей по умолчанию - "changeit"

  5. Вы можете просмотреть изменения, внесенные с помощью этой команды, которые показывают отпечаток сертификата.

    keytool -list -keystore $JAVA_HOME/jre/lib/security/cacerts
    
  6. Если это не решает проблему, попробуйте добавить эти параметры Java в качестве аргументов:

    -Djavax.net.ssl.trustStore="$JAVA_HOME/jre/lib/security/cacerts"
    -Djavax.net.ssl.trustStorePassword="changeit"
    

Я столкнулся с этой проблемой из-за отключенного протокола TLSv1.2. Я решил это, добавив TLSv1.2 в аргументы VM. Ниже приведены шаги для включения протокола

Вам нужно добавить эту строку в аргументах vm -> -Dhttps.protocols=TLSv1.1,TLSv1.2

Перейдите на вкладку серверов в eclipse >> двойной щелчок на wildfly >> Откройте конфигурацию запуска >> вставьте строку выше в аргументы vm в конце.

У меня была эта ошибка из-за антивируса AVAST.

Для настройки SSL веб-сервиса мы должны выполнить следующие шаги:

1) вставьте сертификаты CA в хранилище ключей, вы можете поместить это в JVM или поместить в каталог безопасности jre, или вы можете импортировать в хранилище ключей jre по умолчанию.

2) импортировать сертификат аутентификации с ключом в хранилище ключей (это может быть хранилище ключей Java или другое). хранилище ключей тоже может быть jks, не только pkcs12. Я проверил, и JKS тоже хорошо работает.

3) Скажите JVM, что вам нужно это хранилище ключей - когда мы запускаем Jboss. Это может быть что-то вроде этого (в моем случае это выглядит так):

> "-Dprogram.name=JBossTools: JBoss 4.0 CLONE OF ESS SERVER" -server
> -Xms256m -Xmx512m -XX:MaxPermSize=256m -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 "-Djava.endorsed.dirs=..\jboss-4.0.2\lib\endorsed"
> "-Djavax.net.ssl.keyStore=../Java/jdk1.6.0_45/jre/lib/security/cacerts"
> "-Djavax.net.ssl.keyStorePassword=changeit"

Также сертификаты могут быть закодированы или основаны на 64. Это означает, что вам может потребоваться преобразовать сертификаты с открытым SSL и т. Д. Также другая проблема заключается в том, что иногда преобразование может вызвать проблемы, поэтому вы можете использовать такой сценарий для более простых и гибких преобразований.

Если это сертификат клиента, то вам нужно поместить его в доверенное хранилище; если это сертификат сервера, то он попадает в ваше хранилище ключей. Кроме того, если у вашего сертификата есть промежуточные сертификаты CA, вам нужно добавить их тоже.

Другие вопросы по тегам