Tôi đã gặp khó khăn trong gần một tuần để các ứng dụng của tôi chạy sau khi di chuyển các ứng dụng của tôi từ Windows 2000 sang Windows 2008 R2 Server.Xây dựng đường dẫn PKIX không thành công trong ứng dụng Java
Thủ tục:
- cài đặt Java JDK 1.7.0_25
- Set biến môi trường hệ thống
JAVA_HOME
-C:\Progra~1\Java\jdk1.7.0_25\
- nhập khẩu giấy chứng nhận vào cacerts với
keytool
- Đảm bảo rằng chứng chỉ tồn tại trong
keytool
với-list
.
Tôi đã cố gắng để lặp lại bước 3 với InstallCert
để đảm bảo rằng i havent sai lầm bất cứ điều gì lên.
Các phương pháp trên không giải quyết vấn đề của tôi, vì vậy tôi đã cố gắng để làm điều đó cách lập trình:
System.setProperty("javax.net.ssl.trustStore",
"C:/Progra~1/Java/jdk1.7.0_25/jre/lib/security/cacerts");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
Tuy nhiên không có bất kỳ may mắn. Tôi đang mắc kẹt và không hoàn toàn chắc chắn rằng hướng đi từ đây.
Stack trace:
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 sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1886)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:270)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1341)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:153)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:515)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153)
at util.SMS.send(SMS.java:93)
at domain.ActivationSMSSenderMain.sendActivationMessagesToCustomers(ActivationSMSSenderMain.java:80)
at domain.ActivationSMSSenderMain.<init>(ActivationSMSSenderMain.java:44)
at domain.ActivationSMSSenderMain.main(ActivationSMSSenderMain.java:341)
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:385)
at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292)
at sun.security.validator.Validator.validate(Validator.java:260)
at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:326)
at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:231)
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:126)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1323)
... 14 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:196)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268)
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380)
... 20 more
UPDATE:
Cả System.out.println(System.getProperty("javax.net.ssl.trustStore"));
và System.out.println(System.getProperty("javax.net.ssl.keyStore"));
lợi nhuận null
.
bạn đã thêm chứng chỉ trung gian của mình chưa? – happymeal
Im không hoàn toàn chắc chắn rằng bạn có ý nghĩa, nhưng tôi đã không chạm vào các chứng chỉ mặc định trong cacerts. – JavaCake
cert trung gian đề cập đến tổ chức phát hành chứng chỉ của bạn. nếu tổ chức phát hành chứng chỉ của bạn không đáng tin cậy, chứng chỉ của bạn cũng không đáng tin cậy. ví dụ: để xác thực google.com, bạn cũng sẽ cần phải thêm Google Internet Authority và GeoTrust vào truststore. – happymeal