मैं जावा कोड में एक सुरक्षित (यानी SSL) वेब पेज से पढ़ने की कोशिश कर रहा हूं। मैं URLConnection (java.net) और अपाचे के HTTP क्लाइंट दोनों का उपयोग करने का प्रयास कर रहा हूं।जावा में एसएसएल साइट को प्रमाणीकृत करने में असमर्थ: "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) com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal (SSLSock etImpl.java:1518) com.sun.net.ssl.internal.ssl.Handshaker.fatalSE (Handshaker.java:174) com.sun.net.ssl.internal.ssl.Handshaker.fatalSE (Handshaker.java:168) com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate (ClientHandshaker.java:848) पर com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage पर (ClientHandshaker.java:106) com.sun.net.ssl.internal.ssl.Handshaker.processLoop (Handshaker.java:495) com.sun.net.ssl.internal.ssl.Handshaker.process_record पर पर (हैंडशेकर.जावाश्र 33) com.sun.net.ssl.internal.ssl.SSLSocketIm पर pl.readRecord (SSLSocketImpl.java:818) com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake (SSLSocketImpl.java:1030) com.sun.net.ssl.internal.ssl पर पर। SSLSocketImpl.startHandshake (SSLSocketImpl.java:1057) com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake (SSLSocketImpl.java:1041) पर sun.net.www.protocol.https.HttpsClient पर। afterConnect (HttpsClient.java:402) sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect (AbstractDelegateHttpsURLConnection.java:166) sun.net.www.protocol.http.HttpURLConnection.getInputStream पर (HttpURLConnection पर। जावा: 9 34) sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream पर (HttpsURLConnectionImpl.java:234) com.sap.river.coghead.rest.Main.testJavaHTTPConnection (Main.java:45) पर पर कॉम 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.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 पर .PKIXCertPathValidator.doValidate (PKIXCertPathValidator.java:316) sun.security.provider.certpath.PKIXCertPathValidator.engineValidate (PKIXCert PathValidator.java:178) java.security.cert.CertPathValidator.validate (CertPathValidator.java:206) पर sun.security.validator.PKIXValidator.doValidate (PKIXValidator.java:182 पर) ... 18 अधिक
ध्यान दें कि मैं एक अलग मेजबान के लिए एक गैर-एसएसएल कनेक्शन स्थापित करने में सफल रहा हूं। मैं ब्राउज़र का उपयोग करके इस पृष्ठ को देखने में भी सक्षम हूं - प्रमाण पत्र सही तरीके से मान्य हैं।
क्या आपको किसी भी तरह से प्रमाण पत्र के क्रम को बदलने की आवश्यकता है क्योंकि उन्हें सर्वर से पुनर्प्राप्त किया गया है? क्या कुछ विन्यास है जो मुझे याद आ रही है?
अग्रिम धन्यवाद,
लियोर
अगर यह मदद करता है मैं नहीं जानता था, लेकिन जावा आप डिफ़ॉल्ट SLLSocketFactory बदलने के लिए अनुमति देता है। – Powerlord
हाँ, मुझे कल्पना है कि मुझे उस क्षेत्र में कुछ करने की ज़रूरत है। बस इसे और जांच करने की जरूरत है। वैसे भी, - लियोर – Lior
एफवाईआई, डिफ़ॉल्ट जावा प्रमाणपत्र के लिए पासवर्ड कीस्टोर $ JAVA_HOME/lib/security/cacerts 'changeit' –