OpenJDK 10 отклоняет все сертификаты SSL - PullRequest
4 голосов
/ 31 мая 2019

Я установил OpenJDK 10. Я просто распаковал его, установил переменную PATH и переменную JAVA_HOME.

Java даже отклоняет сертификат google.de (и всех других, которые я пробовал). Я проверил это каким-то фиктивным классом, который пытается соединиться. Результат:

C:\Users\Alexander\Downloads>java SSLPoke google.de 443
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:385)
        at java.base/sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:290)
        at java.base/sun.security.validator.Validator.validate(Validator.java:264)
        at java.base/sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:343)
        at java.base/sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:226)
        at java.base/sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:133)
        at java.base/sun.security.ssl.ClientHandshaker.checkServerCerts(ClientHandshaker.java:1947)
        at java.base/sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1777)
        at java.base/sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:264)
        at java.base/sun.security.ssl.Handshaker.processLoop(Handshaker.java:1098)
        at java.base/sun.security.ssl.Handshaker.processRecord(Handshaker.java:1026)
        at java.base/sun.security.ssl.SSLSocketImpl.processInputRecord(SSLSocketImpl.java:1137)
        at java.base/sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1074)
        at java.base/sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973)
        at java.base/sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1402)
        at java.base/sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:733)
        at java.base/sun.security.ssl.AppOutputStream.write(AppOutputStream.java:67)
        at java.base/sun.security.ssl.AppOutputStream.write(AppOutputStream.java:81)
        at SSLPoke.main(SSLPoke.java:31)
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at java.base/sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141)
        at java.base/sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126)
        at java.base/java.security.cert.CertPathBuilder.build(CertPathBuilder.java:297)
        at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380)
        ... 18 more

В сети много чего нашел, как добавить специальные сертификаты в Java, но я думаю, что в моей установке Java что-то не так в общем.

Так что мой вопрос: что такое холодная причина ???

Ответы [ 2 ]

1 голос
/ 31 мая 2019

Закончилась установка oracle jdk 10 (также 10.0.2), и это работает

C:\Users\Alexander\Downloads>java "SSLPoke" google.de 443
Successfully connected
1 голос
/ 31 мая 2019

Вы должны проверить корневые сертификаты в cacerts хранилище ключей. Файл хранится в JAVA_HOME/jre/lib/security/cacerts (или JAVA_HOME/lib/security/cacerts в более новых версиях Java). Согласно OpenJDK 10 теперь включает в себя сертификаты корневого CA сообщение, вы можете использовать команду keytool для подсчета их:

>jdk-10\bin\keytool -cacerts -list | find "Certificate" /c
Enter keystore password:  changeit
80

Скорее всего, ваша установка Java повреждена, и вам следует переустановить ее. Обратите внимание, что OpenJDK предоставляется несколькими поставщиками, и может случиться так, что вы используете программу установки, которая не устанавливает корневые сертификаты.

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