2013-02-18 24 views
6

Tôi đang thực hiện cuộc gọi Webservice qua kết nối TLS (https) trong Tomcat 7.xPKIX xây dựng con đường thất bại: sun.security.provider.certpath.SunCertPathBuilderException: không thể tìm thấy con đường chứng nhận hợp lệ để yêu cầu mục tiêu

Trong khi gọi WebService, tôi nhận được lỗi sau. Điều gì sẽ là vấn đề? Tôi đã thử tạo Chứng chỉ và CA.

FYI - https://sites.google.com/site/ddmwsst/create-your-own-certificate-and-ca

tôi nhập khẩu chứng chỉ CA và chứng chỉ khác và vẫn Tôi nhận được vấn đề này. Làm ơn cho lời khuyên.

Caused by: javax.wsdl.WSDLException: WSDLException: faultCode=PARSER_ERROR: Problem parsing 'https://localhost:8443/myDomain/MyService?wsdl'.: 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 com.ibm.wsdl.xml.WSDLReaderImpl.getDocument(Unknown Source) 
at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source) 
at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source) 
at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:262) 
at org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.java:205) 
at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:92) 
... 37 more 
Caused by: 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:1902) 
    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:1032) 
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1328) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1355) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339) 
    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.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1299) 
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254) 
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:632) 
    at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:189) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:799) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764) 
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123) 
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:237) 
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300) 
    ... 43 more 
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) 
    ... 61 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) 

Tôi đang kiểm tra Chứng chỉ bằng cách tạo cục bộ. Vì vậy, tôi đã làm theo các bước sau.

phím> keytool -genkey -alias TLS -keystore TLSKeyStore.jks -keyalg RSA -sigalg SHA1withRSA phím> keytool -Xuất -alias TLS -file TLS.cer -keystore TLSKeyStore.jks phím> keytool -certreq -alias TLS -keystore TLSKeyStore.jks -file TLS.csr

CA> thiết RANDFILE = rand

CA> openssl req -new -keyout TLSkey.pem out TLSreq.pem -config C: \ OpenSSL-Win64 \ bin \ openssl.cfg

CA> openssl x509 -signkey TLSkey.pem -req -days 3650 -in TLSreq.pem -out TLSroot.cer -extensions v3_ca

CA> openssl x509 -CA TLSroot.cer -CAkey TLSkey.pem -CAserial serial.txt -req -in ../Keys/TLS.csr -out ../Keys/TLSTestCA.cer -days 365

phím> keytool -import -alias TLSCA -file ../CA/TLSroot.cer -keystore TLSKeyStore.jks phím> keytool -import -alias TLS -file TLSTestCA.cer -keystore TLSKeyStore.jks

Trả lời

4

Cuối cùng Tôi đã có cách để giải quyết vấn đề này.

Tham khảo InstallCert.java trong liên kết này. Chạy chương trình này dưới dạng Standalone bằng cách chuyển đối số dưới dạng localhost: 9443 và Chương trình tạo jssecacerts tệp dưới dạng nhật thực. Sao chép tệp này jssecacerts vào thư mục JDK_HOME \ jre \ lib \ security \ của bạn. Điều đó sẽ giải quyết vấn đề

Thiết lập TLS vui vẻ !!!

+2

Một phiên bản được sửa đổi đôi chút của chương trình đó có sẵn tại http://infposs.blogspot.it/2013/06/installcert-and-java-7.html Nó giải quyết vấn đề với Java 7 (một UnsupportedOperationExcetpion khi bạn chạy InstallCert lần thứ hai để kiểm tra xem chứng chỉ đã được cài đặt đúng chưa). – Pino

3

Dưới đây là một tóm tắt tổng thể về cách nhập chứng chỉ để sửa chữa các lỗi sau:

Error while trying to execute request. 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

Làm thế nào để nhập khẩu giấy chứng nhận

  1. Go to URL trong trình duyệt của bạn, click vào HTTPS chuỗi chứng chỉ (biểu tượng khóa nhỏ bên cạnh địa chỉ URL) để xuất chứng chỉ
    • Nhấp vào "thông tin khác"> "bảo mật"> "hiển thị chứng chỉ"> "chi tiết"> "xuất ..".
    • Save as .der
    • Lặp lại cho bất kỳ giấy chứng nhận bạn cần phải nhập khẩu
  2. Xác định vị trí $ JAVA_HOME/jre/lib/security/cacerts
  3. Import tất cả các tập tin * .der vào tệp cacerts bằng cách sử dụng như sau:

    sudo keytool -import -alias mysitestaging -keystore $JAVA_HOME/jre/lib/security/cacerts -file staging.der 
    sudo keytool -import -alias mysiteprod -keystore $JAVA_HOME/jre/lib/security/cacerts -file prod.der 
    sudo keytool -import -alias mysitedev -keystore $JAVA_HOME/jre/lib/security/cacerts -file dev.der 
    
  4. Các keystore mặc định mật khẩu là 'changeit'

  5. Bạn có thể xem các thay đổi mà bạn thực hiện với lệnh này cho thấy dấu vân tay Giấy chứng nhận.

    keytool -list -keystore $JAVA_HOME/jre/lib/security/cacerts 
    
  6. Nếu điều này không giải quyết được vấn đề, hãy thử thêm các tùy chọn java như các đối số:

    -Djavax.net.ssl.trustStore="$JAVA_HOME/jre/lib/security/cacerts" 
    -Djavax.net.ssl.trustStorePassword="changeit" 
    

tôi đoán là bạn có thể đã bỏ lỡ một bước. Tôi đã gặp lỗi tương tự cho đến khi tôi nhận ra rằng tôi đã nhập sai chứng chỉ

Các vấn đề liên quan