2014-04-17 7 views
7

हम निरस्त एसएसएल प्रमाणपत्रों की एक बम्पर फसल, दिल की धड़कन की सौजन्य के लिए जा रहे हैं। जब मैंने Chrome on Android apparently ignores revoked SSL certificates देखा, तो मुझे आश्चर्य हुआ कि जावा में एक सर्वर से वेब संसाधन का अनुरोध करते समय व्यवहार क्या होगा, जहां हमें एक निरस्त SSL प्रमाणपत्र प्राप्त होता है।निरस्त SSL प्रमाणपत्र के साथ यूआरएल के लिए HttpURLConnection का व्यवहार?

मैं के लिए क्या आशा व्यक्त की SSLHandshakeException किसी प्रकार के साथ एक दुर्घटना थी।

मैं क्या देख रहा हूँ एक सफल कनेक्शन है, लेकिन कोई डेटा डाउनलोड - getInputStream() से पढ़ने -1 की लंबाई देता है। यह मेरी टेस्ट साइट के रूप में https://revoked.grc.com/ का उपयोग करके परीक्षण किया जाता है, जो आपको एक स्पष्टीकरण पृष्ठ लौटाएगा यदि आप इसे प्रमाणपत्र त्रुटियों को अनदेखा करते हैं (उदाहरण के लिए, wget -no-check-certificate के माध्यम से)। मैंने एक ही परिणाम के साथ 4.4, 4.3, और 2.3 अनुकरणकर्ताओं की कोशिश की है।

वहाँ जावा वी एम के लिए एक निर्दिष्ट व्यवहार है? मुझे संदेह है कि एक एंड्रॉइड-विशिष्ट विनिर्देश है, लेकिन यदि एंड्रॉइड का वास्तविक व्यवहार जावा विनिर्देश से अलग है, तो मैं अंतर को स्पष्ट करने के लिए काम कर सकता हूं क्योंकि या तो बग या अनुपलब्ध दस्तावेज़ हैं।

+1

"अपेक्षित" व्यवहार इस बात पर निर्भर करता है कि कौन उम्मीद कर रहा है।असली प्रश्न निर्दिष्ट हैं, और प्रत्येक जेवीएम रिलीज के लिए क्या लागू किया जाता है। –

+0

@StephenC: मैंने सवाल में संशोधन किया है। – CommonsWare

+0

दिल की धड़कन के कारण आपको वास्तव में एक बम्पर फसल होगी, लेकिन इससे सवाल एक हार्दिक सवाल नहीं उठाता है। – EJP

उत्तर

1

अपेक्षित व्यवहार X509TrustManagerCertPathValidator से एक CertPathValidatorException को पकड़ने के लिए और यह एक CertificateException रूप में फिर से फेंक के लिए होगा (क CertificateRevokedException जब एंड्रॉयड में उपलब्ध)।

सीआरएल जांच here लाइन 362 पर अक्षम है। ध्यान दें कि उस लाइन को हटाने के जितना आसान नहीं है, क्योंकि अगर किसी प्रमाणपत्र में कोई सीआरएल नहीं है, तो CertPathValidatorException भी फेंक दिया जाता है।

CertPathValidator here लागू किया गया है और जहां तक ​​मैं कह सकता हूं, स्रोत के माध्यम से घूमते हुए, यह सीआरएल डाउनलोड नहीं करता है।

1

यह javadocs और JSSE Reference Guide for Java की एक सरसरी पढ़ने पर आधारित है।

जावाडोक नहीं कहता है क्या SSL प्रमाणपत्र सत्यापन के रास्ते में होता है। इसके विपरीत, एपीआई यह स्पष्ट करते हैं कि एसएसएल सॉकेट फैक्ट्री और/या HostnameVerifier से शुरू होने वाली पूरी प्रक्रिया अत्यधिक अनुकूलन योग्य है। Javadocs डिफ़ॉल्ट के व्यवहार के बारे में कुछ भी नहीं कहते हैं।

JSSE संदर्भ में बहुत अधिक विस्तार में चला जाता है, लेकिन यह भी बहुत जटिल है ... और स्पष्ट रूप से JSSE कार्यान्वयन विशिष्ट। लेकिन मुझे लगता है कि यह कहता है कि यह सामान ट्रस्टमैनगर द्वारा संभाला जाता है, और डिफ़ॉल्ट ट्रस्टमैनर PXIX है। तो यह कहते हैं निम्नलिखित:

"init (KeyStore ks) विधि का इस्तेमाल किया है, तो डिफ़ॉल्ट PKIXParameters अपवाद है कि निरसन जाँच अक्षम किया गया है के साथ उपयोग किया जाता है यह सक्रिय किया जा सकता प्रणाली संपत्ति com.sun की स्थापना करके। .net.ssl.check सही पर ध्यान दें। ध्यान दें कि इस सेटिंग के लिए आवश्यक है कि सर्टपाथ कार्यान्वयन स्वयं ही निरसन जानकारी का पता लगा सके। सूर्य प्रदाता में PKIX कार्यान्वयन कई मामलों में ऐसा कर सकता है लेकिन सिस्टम प्रॉपर्टी com.sun.security की आवश्यकता है। सक्षम CRLDP को सत्य पर सेट किया जाना चाहिए। "

संक्षेप में, प्रमाणपत्र निरसन जांच डिफ़ॉल्ट रूप से अक्षम होती है।


मैं एंड्रॉयड मामले शोध नहीं है, और मैं यह उम्मीद नहीं होगा एंड्रॉयड कार्यान्वयन में ही हो।

+0

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

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