セキュアな(つまりSSL)WebページからJavaコードを読み取ろうとしています。 URLConnection(java.net)とApacheのHTTPClientの両方を使用しようとしています。どちらの場合も 、私は要求を行うとき、私はこの例外を取得:javaのSSLサイトを認証できません: "pathLenConstraint違反 - 証明書パスの最後の証明書である必要があります。"
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIXパス検証に失敗しました: java.securityを。 cert.CertPathValidatorException: 基本的な制約がチェックに失敗しました: pathLenConstraintが違反 - この証明書 を com.sun.net.ssl.internal.ssl.Alerts.getSSLExceptionで 証明書パスの最後の証明書でなければなりません(Alerts.java:150 ) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSock etImpl.java:1518) at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:174) at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessageでcom.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:848) ( でHandshaker.java:168) (Handshaker.java:495) at com.sun.net.ssl.internal.ssl.Handshaker.process_record Handshaker.java:433) at com.sun.net.ssl.internal.ssl.SSLSocketIm com.sun.net.ssl.internal.sslでpl.readRecord(SSLSocketImpl.java:818) でcom.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1030) 。 sun.net.www.protocol.https.HttpsClientでSSLSocketImpl.startHandshake(SSLSocketImpl.java:1057) でcom.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1041) 。 でafterConnect(HttpsClient.java:402) でsun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166) sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnectionの。 java:934) sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStreamで(HttpsURLConnectionImpl.java:234) でcom.sap.river.coghead.rest.Main.testJavaHTTPConnection(Main.java:45) におけるCOM sun.security.validator.ValidatorException: PKIXパス検証が失敗しました: java.security.cert.CertPathValidatorException: 基本制約.sap.river.coghead.rest.Main.main(Main.java:32) によって引き起こされますチェックが失敗しました: pathLenConstraint違反 - この証明書 は 認証パスの最後の証明書である必要があります sun.security.validator.PKIXValidator.doValidate(PKIXValida tor.java:187) でsun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:139) でsun.security.validator.Validator.validate(Validator.java:203) はcom.sunで.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:172) ( )com.sun.net.ssl.internal.ssl.JsseX509TrustManager.checkServerTrusted(SSLContextImpl。Javaの: java.security.cert.CertPathValidatorException: 基本的な制約320) でcom.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:841) ... 13もっとによって引き起こされますチェックに失敗しました: pathLenConstraintが違反 - この証明書 sun.security.provider.certpath.PKIXMasterCertPathValidator.validate(PKIXMasterCertPathValidator.java:139)で 証明書パス内の最後の証明書でなければなりません を sun.security.provider.certpathでパラメータ: PathValidator.java:178) でjava.security.cert.CertPathValidator.validate(CertPathValidator.java:206) でsun.security.validator.PKIXValidator.doValidate(PKIXValidator.java:182) ... 18以上
私は別のホストへの非SSL接続を確立することに成功したことに注意してください。 ブラウザを使用してこのページを表示することもできます。証明書はそこで正しく検証されます。
証明書をサーバーから取得する際に、証明書の順序を何とか変更する必要がありますか。 いくつかの設定がありますか?事前に
おかげで、
LIOR
はい、私はその地域で何かする必要があると思います。それだけをさらに調査する必要があります。 - Lior – Lior
FYI、デフォルトのJava証明書キーストア$ JAVA_HOME/lib/security/cacertsのパスワードは「changeit」 –