कर्ल को कैसे ठीक करें: (60) एसएसएल प्रमाण पत्र: sudo का उपयोग करते समय अमान्य प्रमाणपत्र श्रृंखला


12

इसलिए चूंकि मेवरिक्स अपग्रेड कर्ल में प्रमाणपत्रों के साथ अधिक मुद्दे हैं।

जब अपने वेब सर्वर से किसी फ़ाइल को कर्ल करने की कोशिश की जाती है, तो यह स्व-हस्ताक्षरित प्रमाण पत्र होता है, जिसमें त्रुटि "SSL प्रमाणपत्र: अमान्य प्रमाणपत्र श्रृंखला" हो रही थी।

यह मेरे सिस्टम किचेन में प्रमाणपत्र जोड़कर और इसे एसएसएल, मुझे यहां और यहां मिली जानकारी की हमेशा अनुमति देने के लिए सही किया गया था ।

यह ठीक काम करता है और जब मैं किसी फ़ाइल को कर्ल करता हूं तो वह ठीक से डाउनलोड हो जाती है।

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

मुझे लगता है कि रूट सिस्टम चाबी का गुच्छा से नहीं पढ़ता है शायद?

क्या कोई इसे ठीक करने का तरीका जानता है?

जवाबों:


17

च आप अपने सीए सर्टिफिकेट्स को फाइलसिस्टम (पीईएम फॉर्मेट में) पर स्टोर करते हैं, आप उन्हें इस्तेमाल करने के लिए कर्ल बता सकते हैं

sudo curl --cacert /path/to/cacert.pem ...

आप प्रमाणपत्र सत्यापन को बंद भी कर सकते हैं

sudo curl --insecure ...

संपादित करें: फीडबैक के संबंध में अपडेट किया गया

यदि आप इसे स्थायी रूप से सेट करना चाहते हैं, तो आपको .curlrcअपने होम डायरेक्टरी में एक फाइल और जगह बनानी चाहिए । sudoकमांड को इस फ़ाइल की आवश्यकता हो सकती है फ़ाइल /var/rootकमांड लाइन के समान विकल्प लेती है लेकिन डैश के बिना। प्रति पंक्ति एक विकल्प:

cacert=/path/to/my/certs.pem

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

आप एक .curlrc फ़ाइल बना सकते हैं और इसे अपने घर के फोल्डर में स्टोर कर सकते हैं, हालांकि sudo का उपयोग करने के लिए इसे /var/root/.curlrc करना पड़ सकता है। फ़ाइल में डैश के बिना, प्रति पंक्ति एक विकल्प होना चाहिए। अतः "कैसर्ट = / पाथ / टू / माय / सीरट्स.पेम"
डैन

1
+1 सेट करने के बदले root-available की .curlrcजगह --insecure। जैसा कि यह कहा गया है - ऐसा करने के लिए नेटवर्क स्थिति में एक हमलावर के लिए, यह एमआईटीएम और इंजेक्शन कोड के लिए तुच्छ होगा।
जिग

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

6

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

आप अपने वर्तमान उपयोगकर्ता के लिए विश्वसनीय के रूप में एक प्रमाणपत्र को चिह्नित कर सकते हैं

$ security add-trusted-cert /path/to/cert.pem

लेकिन यह जड़ के साथ मदद नहीं करता है। समाधान, जैसा कि आप अब अनुमान लगा सकते हैं, या तो sudoऊपर दिए गए हैं, जो तब रूट उपयोगकर्ता के लिए विशेष रूप से विश्वसनीय के रूप में चिह्नित करता है:

$ sudo security add-trusted-cert /path/to/cert.pem

या -dफ़्लैग का उपयोग करके इसे एडमिन ट्रस्ट सेटिंग्स में जोड़ने के लिए:

$ security add-trusted-cert -d /path/to/cert.pem

(OS X इस बात की पुष्टि करने के लिए एक पासवर्ड डायलॉग पॉप अप करेगा।)

दोनों में से किसी एक के लिए पर्याप्त लगता है sudo curl

संदर्भ: https://developer.apple.com/library/mac/Documentation/Darwin/Reference/ManPages/man1/security.1.html


जैसा कि मैंने सवाल में कहा है कि मैंने उन्हें सिस्टम किचेन के साथ-साथ पहले से लॉगिन किचेन में जोड़ा है।
जैकब टॉमलिंसन

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

हां मैंने इस समाधान की कोशिश की जब आपने पहली बार इसे पोस्ट किया था। प्रमाणपत्र सिस्टम किचेन में हैं और भरोसेमंद हैं। फिर भी नसीब नहीं।
जैकब टॉमलिंसन

5

यह वास्तव में आउटपुट संकेत में है:

echo insecure >> ~/.curlrc

उपरोक्त समाधान का उपयोग करने का लाभ यह है कि यह सभी curlआदेशों के लिए काम करता है , लेकिन यह अनुशंसित नहीं है क्योंकि यह असुरक्षित और अविश्वसनीय मेजबान से कनेक्ट करके MITM हमलों का परिचय दे सकता है।


2

यदि आप MacPorts का उपयोग करते हैं (और आपके द्वारा उल्लिखित 3-पार्टी स्क्रिप्ट इसे $PATHकॉल या कॉल से नहीं हटाती है /usr/bin/curl) तो आप इस क्रम में certsyncऔर curlपोर्ट को स्थापित कर सकते हैं ।

certsyncएक उपकरण और एक संबंधित लॉन्च प्लास्ट है जो आपके सिस्टम किचेन को निर्यात करेगा $prefix/etc/openssl/cert.pemऔर एक सिमलिंक स्थापित $prefix/share/curl/curl-ca-bundle.crt -> $prefix/etc/openssl/cert.pemकरेगा ताकि MacPorts कर्ल स्वचालित रूप से प्रमाण पत्र उठाएगा। certsyncजब आप अपने सिस्टम कीचेन को बदलते हैं तो स्वचालित रूप से उत्पन्न फ़ाइलों को भी अपडेट करेंगे।


इस के लिए धन्यवाद, मैं अगर संभव हो तो MacPorts का उपयोग करने से बचना चाहूंगा।
जैकब टॉमलिंसन


-1

sudo curlकाम करने के लिए (OSX सिएरा पर), हमें प्रमाण पत्र को इसमें आयात करना पड़ा System.keychainऔर उस पर भरोसा करना पड़ा । यह चाबी का गुच्छा एप्लिकेशन में या इस कमांड का उपयोग करके मैन्युअल रूप से किया जा सकता है:

sudo security add-trusted-cert -d -k /Library/Keychains/System.keychain /path/to/cert.pem

यह निर्दिष्ट करना -dऔर उसे मैन्युअल रूप से सेट करना महत्वपूर्ण था कि सिस्टम किचेन के लिए रास्ता तय करें -kताकि यह सुनिश्चित हो सके कि वास्तव में आयात किया गया है अगर यह अभी तक नहीं हुआ है।

कमांड बिना काम करता है sudo, लेकिन फिर यूआई संवाद के माध्यम से पासवर्ड के लिए पूछेगा, जो स्क्रिप्ट के लिए एक बाधा हो सकती है।


मुझे त्रुटि मिलती हैSecCertificateCreateFromData: Unknown format in import.
rrallvv

जो किसी ने भी डाउनवोट किया, कृपया यह जान लें कि मैंने स्पष्ट रूप से "OSX सिएरा पर" लिखा था और यह हमारे लिए एक कार्यशील समाधान था। यदि यह नए OSX संस्करणों में काम नहीं करता है, तो हो सकता है कि OSX समर्थन या टूलिंग बदल गया हो। या पिछले टिप्पणीकार की तरह एक मुद्दा, जहां इनपुट फ़ाइल एक समर्थित प्रारूप में नहीं है (प्रश्न यह निर्दिष्ट नहीं करता है)।
अलेक्जेंडर क्लिमेत्सेक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.