2012-04-10 11 views
9

वहाँ विश्वस्त CA प्रमाणपत्र बिना उन्हें अपने आप को वितरण की उचित सेट के साथ एक OpenSSL संदर्भ (SSL_CTX) स्थापित करने के लिए कोई तरीका है? मैं उन्हें अद्यतित रखने की ज़िम्मेदारी नहीं चाहता हूं। आईएमओ किसी भी आधुनिक ऑपरेटिंग सिस्टम को सेवा के रूप में "मुझे विश्वसनीय सीए कर्ट प्राप्त करें" प्रदान करना चाहिए, लेकिन मुझे नहीं पता कि वास्तव में यह मामला है या नहीं।ओपनएसएसएल उचित डिफ़ॉल्ट?

मुझे इस कोड को तीन बार लिखने में कोई फर्क नहीं पड़ता (एक बार विंडोज के लिए, एक बार मैक ओएस एक्स के लिए, और एक बार लिनक्स के लिए), लेकिन मैं इसे उस पर कैप करना पसंद करूंगा। विशेष रूप से, मैं उस कोड को लिखने की कोशिश नहीं करता जो ब्राउज़रों को स्थापित करने और अपने विश्वसनीय प्रमाणपत्र निकालने का प्रयास करने के आसपास घूमता है। (जाहिर है यह easy to get this very wrong है।)

लिनक्स के हाल के संस्करणों का उत्तर SSL_CTX_load_verify_locations पर /etc/ssl/certs/ca-certificates.crt (यदि वह फ़ाइल मौजूद है) के साथ कॉल करना प्रतीत होता है।

क्या विंडोज और मैक ओएस एक्स के लिए सरल उत्तर हैं?

उत्तर

4

आप curl's script का उपयोग कर सकते हैं जो मोज़िला से सूची को परिवर्तित करता है (Curl's maintainer's answer से)। its code के मुताबिक, यह जांचना प्रतीत होता है कि सर्टिफिकेट विश्वसनीय है या नहीं, इससे पहले।

विंडोज़ पर:

5

ओएस एक्स पर, आप उपयोगकर्ता के कीचेन से उपयोगकर्ता द्वारा भरोसेमंद प्रमाणपत्रों पर जानकारी प्राप्त कर सकते हैं। यहाँ यह जानकारी कोको का उपयोग कर एकत्र करने पर कुछ बहुत ही अच्छी जानकारी युक्त एक कड़ी है:

Get Certificates in Keychain

तो कोको अपनी आवश्यकताओं के लिए एक ठीक निर्भरता नहीं है, और आप सीधे कमांड लाइन से सब कुछ करना चाहते हैं तो आप कर सकते थे certtool उपयोगिता का उपयोग करें- इसके बारे में जानने के लिए man certtool और अन्य ऑनलाइन दस्तावेज़ देखें। उपयोगकर्ता का प्रवेश-चेन में सभी प्रमाणपत्रों की सूची के लिए, आप कर सकते हैं:

certtool y k=login.keychain 

या की एक सूची प्राप्त करने के लिए निर्मित भरोसा प्रणाली जड़ों:

certtool y k=/System/Library/Keychains/SystemRootCertificates.keychain 

और शायद

certtool y k=/System/Library/Keychains/SystemCACertificates.keychain 

मुझे यकीन है कि सिस्टम इंटरफेस का उपयोग करके उस जानकारी को प्राप्त करने के अन्य तरीके भी हैं।

लिनक्स पक्ष पर, हाँ, /etc/ssl/certs/ca-certificates.crt जाने का सही तरीका है। यही कारण है कि फ़ाइल डेबियन डेरिवेटिव पर उपलब्ध नहीं होगा (इंक। उबंटू वेरिएंट) जब ca-certificates पैकेज स्थापित किया गया है, और मुझे यकीन है कि वह वहां कैसे ठीक से redhat-आधारित सिस्टम पर प्राप्त करने के लिए नहीं कर रहा हूँ।

+0

क्या आप जानते हैं कि 'certtool' प्रमाण पत्रों के लिए कैसे व्यवहार करता है जिन्हें स्पष्ट रूप से "कभी भरोसा नहीं किया जाता" के रूप में चिह्नित किया जाता है? – Bruno

+0

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

+1

मैकपॉर्ट्स 'certsync उपयोगिता (https://trac.macports.org/browser/trunk/dports/security/certsync/#files, वास्तविक कोड' फ़ाइलों/certsync.m' में भी है) देखें, जो विश्वसनीय भी निर्यात करता है एक फाइल में जड़ों और ट्रस्ट झंडे पर ध्यान देना (उन्हें निर्यात नहीं करके)। – neverpanic

7

यहाँ मैं क्या कर समाप्त हो गया है, CertOpenSystemStore, उन पर पाश का उपयोग कर CertEnumCertificatesInStore का उपयोग कर विंडोज "ROOT" प्रमाणपत्र संग्रह से प्रमाणपत्र प्राप्त CERT_CONTEXT की pbCertEncoded क्षेत्र से X509 एन्कोड कच्चे प्रमाणपत्र हड़पने , एक OpenSSL X509d2i_X509 का उपयोग कर संरचना बनाने, और यह OpenSSL प्रमाण पत्र X509_STORE_add_cert का उपयोग कर स्टोर में जोड़ें। विंडोज फ़ंक्शन सभी crypt32.dll से उपलब्ध हैं।

मैक ओएस एक्स पर:,, SecKeychainOpen का उपयोग कर "/System/Library/Keychains/SystemRootCertificates.keychain" कीचेन से प्रमाणपत्र प्राप्त करने होंगे SecKeychainSearchCopyNext का उपयोग कर पुनरावृति-चेन में प्रमाण पत्र SecKeychainSearchCreateFromAttributes प्रयोग करने के लिए एक इटरेटर बनाने के लिए, SecItemExport का उपयोग कर कच्चे X509 प्रमाण पत्र प्राप्त d2i_X509 का उपयोग कर एक OpenSSL प्रमाण पत्र बनाने के लिए, और इसे X509_STORE_add_cert का उपयोग करके ओपनएसएसएल स्टोर में जोड़ें। मैक फ़ंक्शन /Systems/Library/Frameworks/Security.framework/Security से उपलब्ध हैं।

ओपनएसएसएल X509_STORE को कॉलबैक के साथ एक बेहतर दृष्टिकोण हो सकता है जो ओएस फ़ंक्शंस का उपयोग करता है ताकि वे सभी को कॉपी करने के बजाए एक व्यक्तिगत रूट प्रमाण सत्यापित कर सकें, लेकिन मैंने कोशिश नहीं की है।

+0

क्या आप कोड साझा कर सकते हैं? – proteneer

+0

@ प्रोटीनेर, कोड अब रैकेट ओपनस्ल लाइब्रेरी का हिस्सा है: https://github.com/plt/racket/tree/master/racket/collects/openssl/private –

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