ValidatorExceptionをスローしてApache Commons HttpClient 3.1を使用してJavaでセキュアサーバーに接続する

StackOverflow https://stackoverflow.com/questions/1623924

  •  06-07-2019
  •  | 
  •  

質問

Apache Commons HttpClient 3.1 を使用して安全なサーバーに接続しようとしています。
問題は、アプリケーションが接続するたびにスローされることです

  

sun.security.validator.ValidatorException。

これはスタックトレースです:

  

javax.net.ssl.SSLHandshakeException:   sun.security.validator.ValidatorException:PKIXパス検証   失敗:java.security.cert.CertPathValidatorException:サブジェクト/発行者   名前チェーンチェックに失敗しましたjavax.net.ssl.SSLHandshakeException:   sun.security.validator.ValidatorException:PKIXパス検証   失敗:java.security.cert.CertPathValidatorException:サブジェクト/発行者   名前連鎖チェックに失敗しました           com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)で           com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1611)で           com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:187)で           com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:181)で           com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1035)で           com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:124)で           com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:516)で           com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:454)で           com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:884)で           com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1112)で           com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:623)で           com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59)で           java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)で           java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)で           org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:506)で           org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114)で           org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096)で           org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)で           org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)で           org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)で           org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)で           balanceschecker.connector.Connector.conn(Connector.java:27)で           balanceschecker.connector.Connector.RawPost(Connector.java:99)で           balanceschecker.connector.Connector.Post(Connector.java:111)で           balanceschecker.login.Login.Login(Login.java:87)で           balanceschecker.Main.main(Main.java:21)原因:sun.security.validator.ValidatorException:PKIXパス検証   失敗:java.security.cert.CertPathValidatorException:サブジェクト/発行者   名前連鎖チェックに失敗しました           sun.security.validator.PKIXValidator.doValidate(PKIXValidator.java:251)で           sun.security.validator.PKIXValidator.doValidate(PKIXValidator.java:234)で           sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:158)で           sun.security.validator.Validator.validate(Validator.java:218)で           com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:126)で           com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:209)で           com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249)で           com.sun.net.ssl.internal.sslで。

役に立ちましたか?

解決

このエラーは、証明書チェーンを検証できないことを意味します。考えられる原因は、

  1. ルートCAはJREによって信頼されていません。
  2. 証明書は中間証明書によって署名されていますが、サーバーは証明書とともに証明書を送信していません。

ルート証明書のリストを取得する方法は次のとおりです

keytool -list -keystore $JAVA_HOME/lib/security/cacerts -v

中間証明書が送信されたかどうかを確認するJavaの方法がわかりません。そのためにopensslを使用します。

openssl s_client -host example.com -port 443

サーバーから送信されたすべての証明書が表示されます。 「証明書チェーン」に注意してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top