2012-10-05 13 views
7

अमेज़ॅन ने 1.3.21 संस्करण में अपने एडब्ल्यूएस जावा एसडीके में एसएसएल सुरक्षा को "अपग्रेड" किया। इसने अमेज़ॅन के एडब्लूएस जावा एपीआई का उपयोग करते समय किसी भी एस 3 बाल्टी को एक्सेस किया है जिसमें उनके नाम की अवधि है। मैं संस्करण 1.3.21.1 का उपयोग कर रहा हूं जो कि अक्टूबर/5/2012 तक चालू है। मैंने नीचे दिए गए मेरे उत्तर में कुछ समाधान प्रदान किए हैं लेकिन मैं इस मुद्दे पर अतिरिक्त कार्य ढूंढ रहा हूं।जावा एपीआई का उपयोग कर एस 3/एडब्ल्यूएस के साथ एसएसएल समस्याएं: "सर्टिफिकेट में होस्टनाम मेल नहीं खाता"

यदि आपको यह त्रुटि मिल रही है, तो आपको अपने अपवाद/लॉग में निम्न संदेश की तरह कुछ दिखाई देगा। इस उदाहरण में, बाल्टी नाम foo.example.com है।

INFO: Unable to execute HTTP request: hostname in certificate didn't match: 
     <foo.example.com.s3.amazonaws.com> != <*.s3.amazonaws.com> 
     OR <*.s3.amazonaws.com> OR <s3.amazonaws.com> 
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:220) 
at org.apache.http.conn.ssl.StrictHostnameVerifier.verify(StrictHostnameVerifier.java:61) 
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:149) 
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:130) 
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:390) 

आप एडब्ल्यूएस S3 चर्चा मंच पर इस समस्या का प्रलेखन देख सकते हैं:

https://forums.aws.amazon.com/thread.jspa?messageID=387508&#387508

अमेज़न के समस्या के जवाब निम्नलिखित है।

हम इस नामकरण पैटर्न के साथ बाल्टी के लिए बाल्टी एड्रेसिंग (नए वर्चुअल होस्ट स्टाइल एड्रेसिंग के बजाय) की पुरानी पथ शैली विधि का उपयोग करके इसे ठीक करने में सक्षम होना चाहिए। हम फिक्स पर शुरू कर देंगे और सुनिश्चित करेंगे कि हमारे आंतरिक एकीकरण परीक्षण में अवधि वाले बाल्टी नामों के लिए टेस्ट केस होंगे।

कोई कामकाज या अन्य समाधान? किसी भी प्रतिक्रिया के लिए धन्यवाद।

उत्तर

6

अमेज़ॅन ने संस्करण 1.3.22 जारी किया जो इस मुद्दे को हल करता है। मैंने सत्यापित किया है कि हमारा कोड अब काम करता है। उनके रिलीज नोट्स से उद्धरण के लिए:

बाल्टी जिनके नाम में अवधि है, अब HTTPS पर फिर से सही ढंग से संबोधित किए जा सकते हैं।

कुछ समाधान हैं जो मैं देख सकता हूं, अमेज़ॅन एक नई एपीआई जारी करने तक प्रतीक्षा करने के अलावा।

  1. स्पष्ट रूप से आप एडब्ल्यूएस जावा एसडीके के 1.3.20 संस्करण में वापस रोल कर सकते हैं। दुर्भाग्य से मुझे 1.3.21 में कुछ विशेषताओं की आवश्यकता थी।

  2. आप क्लासपाथ में org.apache.http.conn.ssl.StrictHostnameVerifier को प्रतिस्थापित कर सकते हैं। यह हैक है, हालांकि मुझे लगता है कि अपाचे http कनेक्शन के लिए सभी SSL जांच को हटा दिया जाएगा। यहां कोड है जो मेरे लिए काम करता है: http://pastebin.com/bvFELdJE

  3. मैंने एडब्ल्यूएस स्रोत जार से अपना खुद का पैकेज डाउनलोड और निर्माण समाप्त कर दिया। मैंने निम्नलिखित अनुमानित पैच को HttpClientFactory स्रोत पर लागू किया।

    =================================================================== 
    --- src/main/java/com/amazonaws/http/HttpClientFactory.java  (thirdparty/aws)  (revision 20105) 
    +++ src/main/java/com/amazonaws/http/HttpClientFactory.java  (thirdparty/aws) (working copy) 
    @@ -93,7 +93,7 @@ 
    
             SSLSocketFactory sf = new SSLSocketFactory(
               SSLContext.getDefault(), 
    -        SSLSocketFactory.STRICT_HOSTNAME_VERIFIER); 
    +        SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); 
    
  4. सही ठीक डोमेन नाम बाल्टी पथ आधारित हैंडलिंग के लिए से निपटने से बदलने के लिए है।

Btw, निम्नलिखित की तरह यह काम कर सकते हैं लगता है, लेकिन यह नहीं करता है।एडब्ल्यूएस ग्राहक विशेष रूप से STRICT सत्यापनकर्ता का अनुरोध करता है और डिफ़ॉल्ट से एक का उपयोग नहीं करता है:

SSLSocketFactory.getSystemSocketFactory().setHostnameVerifier(
    SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); 
+3

निष्पक्ष होने के लिए, यदि आप अपने यूआरएल में 'https: //foo.example.com.s3.amazonaws.com/...' का अनुरोध करते हैं, तो '* .s3.amazonaws.com' उस कवर को कवर नहीं करता है होस्ट का नाम: वाइल्डकार्ड [चश्मा] (http://tools.ietf.org/html/rfc2818#section-3.1) के अनुसार बिंदुओं में फैलता नहीं है ("**। a.com foo.a से मेल खाता है। कॉम लेकिन bar.foo.a.com * नहीं ")। अमेज़ॅन क्या कर सकता है '*। *। *। S3.amazonaws.com' के लिए प्रमाण पत्र प्राप्त करें। – Bruno

+0

सहमत @ ब्रूनो। सवाल क्या बात कर रहा है हालांकि उनके जावा एपीआई का उपयोग कर रहा है। असल में मैं अपने एपीआई का उपयोग एक बाल्टी के साथ कुछ भी नहीं कर सकता जिसमें इसकी अवधि होती है। – Gray

+0

बस पढ़ना [आरएफसी 6125] (http://tools.ietf.org/html/rfc6125#section-6.4.3) (सर्वोत्तम अभ्यास कल्पना, लेकिन वास्तव में अभी तक लागू नहीं किया गया है)। मुझे यकीन नहीं है कि कैसे '*। *। *। कुछ 'नियम 1 के साथ अनुमति दी जाएगी। सही बात (यदि आपको वास्तव में एक कस्टम हैंडलर की आवश्यकता है) वास्तव में अपना स्वयं का सत्यापनकर्ता लिखना होगा जो सही पैटर्न की अपेक्षा करता है । ALLOW_ALL_HOSTNAME_VERIFIER के साथ समस्या यह है कि यह एमआईटीएम हमलों की अनुमति देता है। – Bruno

8

बाहर कर देता है कि अमेज़न "अपग्रेड" देर सितंबर 2012 में एस 3 पर SSL सुरक्षा यह पहुँच तोड़ दिया किसी भी S3 बाल्टी है अमेज़ॅन के एडब्ल्यूएस जावा एपीआई का उपयोग करते समय उनके नाम की अवधि।

यह गलत है। एस 3 का एसएसएल वाइल्डकार्ड मिलान वही रहा है जब एस 3 ने 2006 में लॉन्च किया था। एडब्ल्यूएस जावा एसडीके टीम ने एसएसएल प्रमाणपत्रों (अच्छे) की कठोर सत्यापन को सक्षम किया है, लेकिन एस 3 एसएसएल के पीछे चलने वाले बाल्टी नामों को समाप्त कर दिया है प्रमाण (बुरा)।

सही जवाब है कि आप पथ शैलीडीएनएस शैली को संबोधित करने के बजाय को संबोधित कर उपयोग करने की आवश्यकता है। एसएसएल प्रमाण पत्र पर वाइल्डकार्ड मिलान के साथ इस मुद्दे के आसपास काम करने का एकमात्र सुरक्षित तरीका है। सत्यापन को अक्षम करने से आपको मैन-इन-द-मध्य हमलों तक खुलता है।

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

+0

+1 @Ryan उपयोग में s3client इंस्टेंस के लिए एंडपॉइंट सेट करने के लिए थोड़ा और काम आवश्यक हो। मैंने माना था कि यह एक एस 3 प्रमाणपत्र परिवर्तन था। संस्करण 1.3.21 में एसडीके में बग पेश किया गया था। – Gray

+0

यह आपकी क्वेरी पथ-शैली बनाने के लिए सरल, अभी तक प्रभावी तरीका प्रदान करता है ... https://shlomoswidler.com/2009/08/amazon-s3-gotcha-using-virtual-host.html#commentform –

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