2015-10-28 13 views
15

मैं निम्नलिखित अपवाद हो रही है में:SSL प्रमाणपत्र पर ध्यान न दें एक सर्वलेट

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 

मैं कुछ शोध किया और मेरे कनेक्शन कोड के बाद इसे बदला:

SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { 
      public boolean isTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { 
       return true; 
      } 
     }).build(); 

CloseableHttpClient client = HttpClients.custom() 
      .setRedirectStrategy(new LaxRedirectStrategy()) 
      .setSslcontext(sslContext) 
      .setConnectionManager(connMgr) 
      .build(); 

यह अब तक समस्या का समाधान होने, मैं कर रहा हूँ अपवाद नहीं मिला और कनेक्शन काम करता है।

समस्या तब उत्पन्न होती है जब मैं टोमकैट में चल रहे सर्वलेट में एक ही कोड का उपयोग करता हूं।

क्यों?

उत्तर

4

निम्नलिखित कोड आज़माएं।

import java.security.cert.CertificateException; 
import java.security.cert.X509Certificate; 

import javax.net.ssl.X509TrustManager; 

public class DummyX509TrustManager implements X509TrustManager { 

    @Override 
    public X509Certificate[] getAcceptedIssuers() { 
     return null; 
    } 

    @Override 
    public void checkServerTrusted(X509Certificate[] paramArrayOfX509Certificate, String paramString) 
      throws CertificateException { 
    } 

    @Override 
    public void checkClientTrusted(X509Certificate[] paramArrayOfX509Certificate, String paramString) 
      throws CertificateException { 
    } 
}; 


final TrustManager[] trustAllCerts = new TrustManager[] { new DummyX509TrustManager() }; 
try { 
    SSLContext sslContext= SSLContext.getInstance("SSL"); 
    sslContext.init(null, trustAllCerts, null); 

    CloseableHttpClient client = HttpClients.custom() 
     .setRedirectStrategy(new LaxRedirectStrategy()) 
     .setSslcontext(sslContext) 
     .setConnectionManager(connMgr) 
     .build(); 
} catch (KeyManagementException e) { 
    throw new IOException(e.getMessage()); 
} catch (NoSuchAlgorithmException e) { 
    throw new IOException(e.getMessage()); 
} 
+0

मुझे लगता है कि इस CertificateException है, जो दिखाई दिया जब मैं कुंजीस्टोर जोड़ा गया है और .crt आयातित से निपटने के लिए किया गया था। बाहर निकलता है मैं वास्तव में इस वर्कअराउंड का उपयोग नहीं कर सकता, मैं शुरुआती SunCertPathBuilderException से बचना चाहता हूं। – Tim

+0

फिर भी मैं अपने समाधान की कोशिश की और मैं इस त्रुटि अब हो रही है: विश्वास storejava.security.cert.CertificateParsingException तक पहुँचने समस्या: java.security.KeyStoreException 'लंघन पर हस्ताक्षर किए, 266 बाइट्स = com.sun.net.ssl.internal पर। ssl.TrustManagerFactoryImpl.engineInit (TrustManagerFactoryImpl.java:55) ' – Tim

+1

आपके उत्तर ने मुझे पूरी चीज़ की जांच की और मुझे मेरे कोड में एक त्रुटि हुई। चूंकि आप अकेले हैं जिन्होंने उत्तर दिया, यह उचित है कि आपको बक्षीस मिलें :) धन्यवाद – Tim

2

क्या वेबसाइट प्रमाण पत्र किसी निजी/कंपनी के स्वामित्व वाली सीए द्वारा जारी किया गया है या यह स्वयं हस्ताक्षरित है?

... new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() ... 
  • Trustore रिक्त है:
    आप पर भरोसा किया सीए + उनके जंजीरों से युक्त एक कीस्ट्रोक/फ़ाइल को लोड करने की कोशिश की?
  • ट्रस्टेड हमेशा "सत्य" लौटा रहा है:
    आप मानक जेएसएसई प्रमाण पत्र सत्यापन प्रक्रिया को ओवरराइड कर रहे हैं और सभी पर भरोसा कर रहे हैं, इसलिए कोई सुरक्षा नहीं है।
  • उस अपवाद का अर्थ है: प्रमाणपत्र सत्यापन विफल हुआ। रूटका, या पूरी सीए-श्रृंखला गायब है।

तो ऐसा लगता है बिलाव की तरह अपने SSLContext नजरअंदाज कर दिया। इस तरह प्रयुक्त, sslContext वैसे भी बेकार है। परिणाम डिबगिंग? जेवीएम एसएसएल सेटिंग्स? अपवाद स्टैक ट्रेस?

-1

आपने एक सर्वलेट विकसित किया है। सही? यह एक वेब पेज के अलावा कुछ भी नहीं है। यदि आप SSL सक्षम वेबपृष्ठ चाहते हैं तो उस प्रमाणपत्र को स्थापित करने के बाद आपको SSL प्रमाणपत्र खरीदना होगा। यदि आपके पास वह प्रमाण पत्र नहीं है तो उपर्युक्त कोड का उपयोग करें। ऊपर उल्लिखित कोड सभी सुरक्षा मुद्दों के लिए उपयुक्त है।

आप Verisign और Thawte जैसी कंपनियों से SSL/TSL प्रमाण पत्र खरीदने के लिए किया है।

संबंधित मुद्दे