2011-10-07 10 views
7

मैं इस तथ्य को अनदेखा करने के लिए अपाचे कॉमन्स एचटीपी क्लाइंट लाइब्रेरी (संस्करण 3.1) प्राप्त करने का प्रयास कर रहा हूं कि सर्वर प्रमाणपत्र को भरोसेमंद के रूप में स्थापित नहीं किया जा सकता है (जैसा कि फेंक दिया गया अपवाद 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 से प्रमाणित है)।अपाचे कॉमन्स एचटीपी क्लाइंट 3.1 कैसे बनाएं HTTPS प्रमाणपत्र अमान्यता को अनदेखा करें?

मैं Make a connection to a HTTPS server from Java and ignore the validity of the security certificate के साथ-साथ Disable Certificate Validation in Java SSL Connections, मिला लेकिन पहले करने के लिए स्वीकार किए जाते हैं जवाब, HttpClient 4.0 (दुर्भाग्य से मैं अपग्रेड नहीं कर सकते के लिए है जब तक कोई कैसे है कि एक ही के दो विभिन्न संस्करणों का उपयोग करने की दिशा में मुझे इंगित कर सकते हैं पुस्तकालय एक ही परियोजना के भीतर), हालांकि इसमें another answer with little more than a dead link that supposedly went to a 3.x solution है। दूसरे पृष्ठ पर कोड का कोई प्रभाव नहीं पड़ता है जब मैं इसका थोड़ा समायोजित संस्करण उपयोग करता हूं (मूल रूप से, अज्ञात लोगों की इनलाइन का उपयोग करने के बजाय कक्षाओं को पुराने फैशन में घोषित करना, साथ ही साथ TLS पर SSL के अतिरिक्त आवेदन करना, उदाहरण कोड में किए गए डिफ़ॉल्ट HTTPS सॉकेट फैक्ट्री के लिए SSL का उपयोग करना)।

अधिमानतः, मैं, कुछ है कि है thread-/उदाहरण चौड़ा करना चाहते हैं ताकि किसी भी HttpClient उदाहरण (और/या संबंधित वर्ग) मेरी सर्वलेट कोड के भीतर से बनाया जा रहा ( नहीं एक और सर्वलेट में चल रहा एक ही कंटेनर) लक्स सर्टिफिकेट सत्यापन तर्क का उपयोग करेगा, लेकिन इस बिंदु पर मुझे लगता है कि जब तक यह स्व-हस्ताक्षरित प्रमाण पत्र को मान्य मानता है तब तक कुछ भी ऐसा करना शुरू हो जाएगा।

हां, मुझे पता है कि सुरक्षा प्रभाव हैं, लेकिन एकमात्र कारण है कि मुझे इसकी आवश्यकता क्यों है परीक्षण उद्देश्यों के लिए। विचार एक कॉन्फ़िगरेशन विकल्प को कार्यान्वित करना है जो नियंत्रित करता है कि सामान्य रूप से अविश्वसनीय प्रमाणपत्र विश्वसनीय हैं या नहीं, और डिफ़ॉल्ट रूप से "गैर-भरोसेमंद सर्वर प्रमाणपत्रों पर भरोसा न करें" में इसे छोड़ दें। इस तरह इसे आसानी से विकास में चालू या बंद किया जा सकता है, लेकिन इसे उत्पादन में करने के लिए किसी के रास्ते से बाहर निकलने की आवश्यकता होगी।

उत्तर

11

स्वयं हस्ताक्षरित प्रमाणपत्र स्वीकार करने के लिए हम कॉमन्स http क्लाइंट से किसी विशेष HttpConnection के लिए निम्न कोड का उपयोग करते हैं।

HttpConnection con = new HttpConnection(host, port); 
con.setProtocol(new Protocol("easyhttps", (ProtocolSocketFactory)new EasySSLProtocolSocketFactory(), port)); 

EasySSLProtocolSocketFactory contrib एसएसएल पैकेज में पाया जा सकता है। और इसका उपयोग कम सुरक्षा सेटिंग के साथ केवल एक कनेक्शन बनाने के लिए किया जा सकता है।

Protocol easyhttps = new Protocol("https", (ProtocolSocketFactory)new EasySSLProtocolSocketFactory(), 443); 
Protocol.registerProtocol("https", easyhttps); 

HttpClient client = new HttpClient(); 
GetMethod httpget = new GetMethod("https://localhost/"); 
client.executeMethod(httpget); 

लेकिन मुझे लगता है कि अन्य सर्वलेट से कनेक्शन को प्रभावित करती है: यह जैसा कि यहाँ दिखाया लगता है यह भी हर ग्राहक के लिए प्रोटोकॉल स्थापित करने के लिए इस्तेमाल किया जा सकता है।

[संपादित करें] क्षमा करें, मुझे नहीं पता कि यह आपके लिए काम करेगा या नहीं। बस मान्यता है कि हम क्लाइंट 3.0.1 का उपयोग कर रहे हैं और 3.1 नहीं।

+0

हां, 3.1 ने आपके द्वारा उदाहरण के प्रोटोकॉल कन्स्ट्रक्टर को बहिष्कृत कर दिया है, और इसमें स्पष्ट रूप से कोई HttpConnection # setProtocol विधि नहीं है। करुणा, यह आशाजनक लग रहा था। :( –

+0

कन्स्ट्रक्टर को 3.0.1 में भी बहिष्कृत किया गया है;) अपाचे स्रोत भंडार के अनुसार 'HttpConnection' अभी भी 3.1 में' setProtocol' विधि है: http://svn.apache.org/viewvc/httpcomponents/oac.hc3x /tags/HTTPCLIENT_3_1/src/java/org/apache/commons/httpclient/HttpConnection.java?view=markup – Gandalf

+0

कारखाने को 'प्रोटोकॉल सॉकेट फैक्टरी' में डाला जा सकता है, जो केवल एक उग्र है और इसलिए यदि आवश्यक नहीं है तो वे अव्यवस्थित कन्स्ट्रक्टर को हटा दें , तो यह पहले से ही गैर-बहिष्कृत नियंत्रक का उपयोग करता है, मैं अपनी पोस्ट अपडेट करूंगा। – Gandalf

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