ओपनएसएसएल सीट्स फ़ोल्डर में सीए नहीं उठा रहा है


9

हमें curlHTTPS सर्वर से कनेक्ट नहीं होने से परेशानी हो रही है:

$ curl https://the-problem-site.com    (not the real URL!)   
curl: (35) error:14077458:SSL routines:SSL23_GET_SERVER_HELLO:reason(1112)

1112 SSL_R_TLSV1_UNRECOGNIZED_NAMEमें है ssl.h

अगर मैं openssl s_client -connect the-problem-site.com:443इसके बजाय कोशिश करता हूं तो मैं देखता हूं

CONNECTED(00000003)   
depth=1 /C=US/O=GeoTrust, Inc./CN=GeoTrust SSL CA   
verify error:num=20:unable to get local issuer certificate   
verify return:0   

Certificate chain   
0 s:/serialNumber=xx/C=xx/ST=xx/L=xxxx/O=xx/OU=xx/CN=the-problem-site.com   
i:/C=US/O=GeoTrust, Inc./CN=GeoTrust SSL CA   
1 s:/C=US/O=GeoTrust, Inc./CN=GeoTrust SSL CA   
i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA   

यह समस्या की तरह लग रहा है कि यह भरोसा नहीं है /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA। हालाँकि वह प्रमाणपत्र स्थापित है: यह है /etc/ssl/certs/GeoTrust_Global_CA.pem, और अगर इसके बजाय मैं चलाता हूं

Opensl s_client -connect the-problem-site.com:443 -CAfile /etc/ssl/certs/GeoTrust_Global_CA.pem

फिर सब कुछ काम करता है। प्रमाणपत्र भी एक हैश-नामित फ़ाइल के रूप में मौजूद है b0f3e76e.0और यह अंदर है ca-certificates.crt। हालाँकि, जहाँ तक मैं देख सकता हूँ, न तो कर्ल और न ही ओपनस्एल किसी भी प्रमाण पत्र को पढ़ने का प्रयास कर रहे हैं; यदि मैं straceउन्हें देखता हूं , तो त्रुटियों से भी नहीं, /usr/lib/ssl/certsया /etc/ssl/certsबिल्कुल भी पढ़ने का प्रयास नहीं है। हालांकि यह Opensl.cnf को पढ़ता है। हम दौड़ चुके हैं update-ca-certificates

यह उबंटू 10.04 है जिसमें ओपनश्ल 0.9.8k है। हम दो अलग-अलग इंस्टॉलों पर समस्या को पुन: उत्पन्न कर सकते हैं (हालांकि यह संभव है कि पीछे से दूसरे का क्लोन)। यदि मैं ओपनएसएल 0.9.8e के साथ एक सेंटोस वीएम पर एक ही परीक्षण की कोशिश करता हूं तो यह ठीक काम करता है, और मैं इसे प्रमाण पत्र फ़ाइल को पढ़ते हुए देख सकता हूं strace। उबंटू के पट्टियों में समान बिंदु पर कोई समान फ़ाइल पहुँच नहीं है। अगर मैं openssl.cnfफ़ाइल को CentOS VM से उबंटू मशीनों में कॉपी करता हूँ तो कोई फर्क नहीं पड़ता। पर्यावरण या एक .rc फ़ाइल में कुछ भी स्पष्ट नहीं है जो इसका कारण हो सकता है।

किसी भी विचार मैं गलत क्या कर रहा हूँ? क्या यह कार्य, अर्थात कमांड लाइन से स्वचालित रूप से स्थापित सीए को ओपनसेल और कर्ल पिकअप करना चाहिए? यह कैसे कॉन्फ़िगर किया गया है? धन्यवाद!


एक अन्य डेटा बिंदु: 13 सर्वर की एक साफ स्थापना पर, curlप्रमाण पत्र फ़ाइल उठाता है और ठीक काम करता है। openssl s_clientहालांकि अभी भी नहीं है। ऐसा क्यों होगा?


हम बिल्कुल उसी मुद्दे का सामना कर रहे हैं। मैं खुलता में कुछ dodginess संवेदन कर रहा हूँ!
मिलोसगजदोस

@ क्या आपने इसका हल ढूंढ लिया है? कृपया जोड़ें और यदि ऐसा है तो एक उत्तर दें। हम इसी व्यवहार को देख रहे हैं।
माइक एस

@ मायकेएस नहीं जहाँ तक मुझे खेद है, लेकिन मैं उस टीम में नहीं हूँ। मैं उनसे कल पूछूंगा।
रूप

जवाबों:


4

आपके सिस्टम पर कई क्रिप्टोग्राफिक लाइब्रेरी हैं:

  • ओपनएसएसएल (सोने का मानक, बीएसडी-शैली (बहुत ही मुफ्त) लाइसेंस के साथ जिसमें कुछ समस्याग्रस्त खंड (जीपीएल संगतता को रोकना, लेकिन "बुरा" कुछ भी नहीं है) जीएनयू दुनिया में इसके गोद लेने को सीमित करता है)
  • GnuTLS (FSF से प्रतिस्थापन; दो फ्लेवर्स में आता है, LGPLv2-लाइसेंस (लेकिन अचिन्त्य) और LGPLv3- लाइसेंस (और इस तरह GPLv2- केवल कार्यक्रमों के साथ असंगत); भी, जो सुरक्षा बढ़ाता है)
  • एनएसएस (नेटस्केप / मोज़िला का पुस्तकालय, शायद ही कभी बाहर उपयोग किया जाता है; नए मानकों को अपनाने के लिए धीमा)
  • PolarSSL, MatrixSSL, NaCl / Salt जैसे नाबालिग

उन सभी में, निश्चित रूप से, समानताएं और अंतर हैं। सॉफ्टवेयर जो उनका उपयोग करता है (क्रिप्टोग्राफ़िक उद्देश्यों के लिए, या एसएसएल / टीएलएस का उपयोग करने के लिए) कभी-कभी इन पुस्तकालयों में से एक से अधिक का उपयोग करने का समर्थन करता है (उदाहरण के लिए लिंक्स, वेब ब्राउज़र, आमतौर पर ओपनएसएसएल के खिलाफ जुड़ा हुआ है, लेकिन GnuTLS का समर्थन भी करता है (सिर्फ अच्छा नहीं है) GNU लोगों से अपील करने का आदेश)।

CURL भी उन तीन प्रमुख क्रिप्टो पुस्तकालयों में से किसी एक का समर्थन करने वाली परियोजनाओं में से एक है। यह ज्यादातर इसलिए है क्योंकि cURL प्राथमिक, एक पुस्तकालय है जिसका उपयोग अभी तक अन्य कार्यक्रमों द्वारा किया जा सकता है जब वे http, ftp, आदि कनेक्शनों का उपयोग करके चीजें डाउनलोड (या अपलोड) करना चाहते हैं। curlकमांड लाइन उपकरण इन वेरिएंट में से किसी से आ सकता है।

अब, मुझे पूरा यकीन है कि समस्या को आप नए सिरे से स्थापित सिस्टम के साथ देख रहे हैं, निम्नलिखित है:

OpenSSL और GnuTLS दोनों का उपयोग करके /etc/ssl/certs/<hash>.<number>-स्टाइल CA निर्देशिकाओं का समर्थन करते हैं । OpenSSL संस्करण 0.x और GnuTLS हालांकि ओपनएसएसएल संस्करण 1.x उपयोगों की तुलना में उपरोक्त हैश की गणना करने के लिए एक अलग एल्गोरिथ्म का उपयोग करता है। (दोनों किसी सिस्टम पर सहवास कर सकते हैं; यदि विभिन्न प्रमाणपत्रों में समान हैश है तो आप उनके लिए एक अलग संख्या का उपयोग करें। लेकिन किसी कारण से, डेबियन / उबंटू का ca-certificatesपैकेज ऐसा प्रतीत नहीं होता है।) इसके अतिरिक्त, GnuTLS के कुछ संस्करण नहीं हैं। निर्देशिका का उपयोग करते हुए समर्थन, लेकिन केवल एक फ़ाइल का उपयोग करके /etc/ssl/certs/ca-certificates.crt(जो आमतौर पर ca-certificatesपैकेज के अनुचर स्क्रिप्ट द्वारा प्रबंधित किया जाता है , लेकिन विचलन कर सकता है); आप पुराने संस्करण का उपयोग करते प्रतीत होते हैं, इसलिए यह आपके द्वारा हिट की जाने वाली चीज़ हो सकती है।

openssl s_clientडिफ़ॉल्ट रूप से (यानी -CApathया -CAfileविकल्प के बिना ) प्रमाण पत्र के लिए कहीं भी नहीं दिखता है ।

curlअपग्रेड किए गए इंस्टॉलेशन से आपका संभावित रूप curlसे फ्रेश इंस्टॉलेशन से अलग क्रिप्टो लाइब्रेरी का उपयोग होता है ।

पुराने GnuTLS संस्करणों के व्यवहार की नकल openssl s_client -CAfile /etc/ssl/certs/ca-certificates.crt -connect the-problem-site.com:443करने के openssl s_client -CApath /etc/ssl/certs -connect the-problem-site.com:443लिए प्रयास करें ।

अगर आपके सिस्टम पर कहीं भी OpenSSL 1.x है, तो डबल-चेक करें (उबंटू LTS वर्जन में भी बड़े अपडेट्स को चुपके के लिए जाना जाता है), और यदि हाँ, तो फ़ाइल के हैश की जाँच करें:

openssl x509 -noout -hash -in /etc/ssl/certs/GeoTrust_Global_CA.pem
openssl x509 -noout -subject_hash_old -in /etc/ssl/certs/GeoTrust_Global_CA.pem
openssl x509 -noout -subject_hash -in /etc/ssl/certs/GeoTrust_Global_CA.pem

आम तौर पर, या तो, दूसरी और तीसरी कमांड विफल होनी चाहिए (ओपनएसएसएल 0.x), या पहली और तीसरी कमांड को एक ही हैश प्रदर्शित करना चाहिए, लेकिन दूसरे को एक अलग हैश (ओपनएसएसएल 1.x) प्रदर्शित करना चाहिए। GnuTLS दूसरी कमांड से आउटपुट का उपयोग करेगा (यदि ओपनएसएसएल 1.x स्थापित है); यदि OpenSSL 0.x स्थापित है तो वही हैश है। आप मैन्युअल रूप से इस तरह के सिम्लिंक बना सकते हैं।

आप डीबगिंग फ़ीडबैक प्रदान करने के बाद मैं इस पोस्ट को अपडेट कर सकता हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.