Tôi đang cố gắng đọc từ trang web bảo mật (ví dụ: SSL), trong mã Java. Tôi đang cố gắng sử dụng cả hai URLConnection (java.net) và HTTPClient của Apache. Trong cả hai trường hợp, khi tôi thực hiện theo yêu cầu, tôi nhận được ngoại lệ này:Không thể xác thực trang web SSL trong java: "pathLenConstraint vi phạm - cert này phải là chứng chỉ cuối cùng trong đường dẫn chứng nhận"
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: đường PKIX xác nhận thất bại: java.security. cert.CertPathValidatorException: trở ngại cơ bản hãy kiểm tra thất bại: pathLenConstraint vi phạm - cert này phải là cert cuối cùng trong đường dẫn xác nhận tại com.sun.net.ssl.internal.ssl.Alerts.getSSLException (Alerts.java:150) tại com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal (SSLSock etImpl.java:1518) tại com.sun.net.ssl.internal.ssl.Handshaker.fatalSE (Handshaker.java:174) tại com.sun.net.ssl.internal.ssl.Handshaker.fatalSE (Handshaker.java:168) tại com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate (ClientHandshaker.java:848) tại com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage (ClientHandshaker.java:106) tại com.sun.net.ssl.internal.ssl.Handshaker.processLoop (Handshaker.java:495) tại com.sun.net.ssl.internal.ssl.Handshaker.process_record (Handshaker.java:433) tại com.sun.net.ssl.internal.ssl.SSLSocketIm pl.readRecord (SSLSocketImpl.java:818) tại com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake (SSLSocketImpl.java:1030) tại com.sun.net.ssl.internal.ssl. SSLSocketImpl.startHandshake (SSLSocketImpl.java:1057) tại com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake (SSLSocketImpl.java:1041) tại sun.net.www.protocol.https.HttpsClient. afterConnect (HttpsClient.java:402) tại sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect (AbstractDelegateHttpsURLConnection.java:166) tại sun.net.www.protocol.http.HttpURLConnection.getInputStream (HttpURLConnection. java: 934) tại sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream (HttpsURLConnectionImpl.java:234) tại com.sap.river.coghead.rest.Main.testJavaHTTPConnection (Main.java:45) tại com .sap.river.coghead.rest.Main.main (Main.java:32) Gây ra bởi: sun.security.validator.ValidatorException: Xác thực đường dẫn PKIX không thành công: java.security.cert.CertPathValidatorException: ràng buộc cơ bản kiểm tra không thành công: đường dẫnLenConstraint vi phạm - chứng chỉ này phải là chứng nhận cuối cùng trong đường dẫn chứng nhận tại sun.security.validator.PKIXValidator.doValidate (PKIXValida tor.java:187) tại sun.security.validator.PKIXValidator.engineValidate (PKIXValidator.java:139) tại sun.security.validator.Validator.validate (Validator.java:203) tại com.sun .net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted (X509TrustManagerImpl.java:172) tại com.sun.net.ssl.internal.ssl.JsseX509TrustManager.checkServerTrusted (SSLContextImpl.java: 320) tại com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate (ClientHandshaker.java:841) ... 13 hơn gây ra bởi: java.security.cert.CertPathValidatorException: hạn chế cơ bản hãy kiểm tra thất bại: pathLenConstraint vi phạm - cert này phải là cert cuối cùng trong đường dẫn xác nhận tại sun.security.provider.certpath.PKIXMasterCertPathValidator.validate (PKIXMasterCertPathValidator.java:139) tại sun.security.provider.certpath .PKIXCertPathValidator.doValidate (PKIXCertPathValidator.java:316) tại sun.security.provider.certpath.PKIXCertPathValidator.engineValidate (PKIXCert PathValidator.java:178) tại java.security.cert.CertPathValidator.validate (CertPathValidator.java:206) tại sun.security.validator.PKIXValidator.doValidate (PKIXValidator.java:182) ... chi tiết 18
Lưu ý rằng tôi đã thành công trong việc thiết lập kết nối không ssl, đến một máy chủ lưu trữ khác. Tôi cũng có thể xem trang này bằng trình duyệt - chứng chỉ được xác thực chính xác ở đó.
Bạn có cần phải bằng cách nào đó thay đổi thứ tự chứng chỉ khi chúng được truy xuất từ máy chủ không? Tôi có thiếu một số cấu hình không?
Cảm ơn trước,
Lior
Tôi không biết điều này có hữu ích hay không, nhưng Java cho phép bạn thay đổi SLLSocketFactory mặc định. – Powerlord
vâng, tôi tưởng tượng tôi cần phải làm gì đó trong khu vực đó. Chỉ cần điều tra thêm. Cảm ơn, - Lior – Lior
FYI, mật khẩu cho kho khóa Java chứng chỉ mặc định $ JAVA_HOME/lib/security/cacerts là 'changeit' –