मैंने हमारी कंपनी में कुछ आंतरिक सेवाओं के लिए एक स्व-हस्ताक्षरित रूट प्रमाणपत्र प्राधिकरण बनाया, जिसे मैंने खुद को कॉन्फ़िगर किया (ज्यादातर HTTPS पर काम किया)। फिर मैंने उन सेवाओं के लिए प्रमाण पत्र बनाए, इस सीए के साथ हस्ताक्षर किए।
अब मैं इस CA से जारी मौजूदा सर्वर प्रमाणपत्रों को अमान्य किए बिना रूट CA में एक x509 एक्सटेंशन (CRL वितरण बिंदु) जोड़ना चाहता हूं। क्या यह संभव है?
मेरी आंत महसूस "हाँ" है क्योंकि जैसा कि मैं समझता हूं, प्रमाणपत्र पहचान पर "पूर्ण अधिकार" के लिए संबंधित निजी कुंजी तक पहुंच आवश्यक और पर्याप्त है। यही है, जब तक कि प्रमाणपत्र में सार्वजनिक कुंजी के साथ किसी प्रकार की गैर-सम्मिलित नहीं की जाती है जब यह जेनरेट किया जाता है (संभावना)।
मैं अभी भी एसएसएल प्रमाणपत्र प्रबंधन के लिए काफी नया हूं, लेकिन मुझे (मुझे लगता है) मानक ट्रस्ट श्रृंखला की मूल बातें समझते हैं। मैं अन्य पीकेआई क्रिप्टो के बुनियादी उपयोग के साथ भी सहज हूं: मैं एसएसएच कुंजी का प्रबंधन करता हूं और हस्ताक्षर और एन्क्रिप्शन के लिए जीपीजी का उपयोग करता हूं। मैंने कंप्यूटर साइंस का अध्ययन किया है, हालांकि मैं क्रिप्टोग्राफी में केवल एक स्वयं-पढ़ा हुआ डब्बलर हूं।
मैंने मूल IIRC के लिए CSR कभी नहीं बनाया (मुझे लगता है कि यह प्रत्यक्ष उत्पादन था openssl req -new -x509
)। मेरे पास अभी भी मूल सीए की निजी कुंजी है, निश्चित रूप से, और इसका उपयोग करते हुए मैं मूल प्रमाणपत्र को प्रमाणित करने के प्रयास में "रिवर्स" करने में सक्षम था:
openssl x509 -x509toreq -in MyCA.pem -out MyCA.csr -signkey private/MyCA.key
मैं उम्मीद कर रहा था कि यह प्रभावी रूप से उल्लिखित नॉन को "एक्स्ट्रेक्ट" करेगा, और मुझे प्रमाण पत्र को फिर से बनाने की अनुमति देगा लेकिन इस बार एक crlDistributionPoints
क्षेत्र के साथ , और परिणामस्वरूप मूल सीए के साथ हस्ताक्षरित सभी प्रमाण पत्र अभी भी इस नए सीए के खिलाफ मान्य होंगे, अपवाद के साथ उस क्लाइंट को मेरे (वर्तमान में खाली) CRL फ़ाइल को HTTP URL से फ़ील्ड में निर्दिष्ट किया जाएगा।
इसलिए मैंने एक एक्सटेंशन कॉन्फिग फाइल बनाई ext.conf
:
[ cert_ext ]
subjectKeyIdentifier=hash
crlDistributionPoints=URI:http://security.mycompany.co.za/root.crl
और मैंने CSR से रूट CA का नया संस्करण तैयार किया:
openssl x509 -extfile ./ext.conf -extensions cert_ext -req -signkey private/MyCA.key -in MyCA.csr -out MyNewCA.pem
अब जब मैं प्रमाण पत्र के साथ देखता हूं openssl x509 -text -in MyNewCA.pem | less
मैं CRL एक्सटेंशन भाग देख सकता हूं:
X509v3 extensions:
X509v3 Subject Key Identifier:
82:D0:01:03:49:FF:30:16:FA:DC:0A:1E:C1:8C:3D:66:A1:78:FF:F8
X509v3 CRL Distribution Points:
Full Name:
URI:http://security.mycompany.co.za/root.crl`
लेकिन अफसोस! मेरे पहले हस्ताक्षरित प्रमाणपत्र अब इस के खिलाफ मान्य नहीं हैं:
openssl verify -verbose -CAfile MyCA.pem git.pem
git.pem: OK
openssl verify -verbose -CAfile MyNewCA.pem git.pem
git.pem: <redacted DN>
error 20 at 0 depth lookup:unable to get local issuer certificate
ज्यादातर मैं प्रमाण पत्र कैसे और क्यों काम में अधिक अंतर्दृष्टि के लिए देख रहा हूँ। लेकिन मैं इस समस्या का समाधान करने के लिए भी स्वागत करूंगा, इसलिए यहां कुछ पृष्ठभूमि की जानकारी भी है।
मैं इस गड़बड़ी में कैसे आया: मेरे सीए को एक्सप्लोरर आरएमबी के माध्यम से स्थापित करने के बाद एचटीटीपीएस आंतरिक सेवाओं में बहुत काम करता है → विंडोज पर प्रमाणपत्र जीयूआई स्थापित करें, या इसके /usr/local/share/ca-certificates
बाद update-ca-certificates
डेबियन और उबंटू। लेकिन मैं हाल ही में एक अपवाद में भाग गया: विंडोज पर गेट, विशेष रूप से अगर एसएसएल बैक-एंड के रूप में विंडोज सिक्योर चैनल का उपयोग करने के लिए स्थापित किया गया है। जो जाहिर तौर पर डिफ़ॉल्ट रूप से जोर देकर कहते हैं कि एसएसएल प्रमाणपत्रों में सीआरएल क्षेत्र होना चाहिए।
इसलिए मुझे लगता है कि यह वास्तव में एक विंडोज सिक्योर चैनल मुद्दा है क्योंकि त्रुटि संदेश जो मैं पूरी तरह से Microsoft-विशेष में चलता रहता हूं: fatal: unable to access 'https://angery@git.mycompany.co.za/gitblit/r/secret_project.git/': schannel: next InitializeSecurityContext failed: Unknown error (0x80092012) - The revocation function was unable to check revocation for the certificate.
अगर मैं OpenSSL के साथ Git स्थापित करता हूं और git.http.sslcainfo द्वारा बताई गई फ़ाइल पर मैन्युअल रूप से अपने CA को सूचित करता हूं तो यह काम करता है, लेकिन मुझे डर है कि मेरे उपयोगकर्ता SSL पहचान सत्यापन पर रोक लगाने के लिए इच्छुक होंगे क्योंकि उन्हें लगता है कि यह प्रक्रिया अधिक प्रयास से अधिक है "आसान" विंडोज प्रमाणपत्र इंस्टॉलर जीयूआई के माध्यम से क्लिक करना।
-x509toreq
मौजूदा रूट CA से सभी अद्वितीय जानकारी को पुनर्प्राप्त किया जाएगा, लेकिन या तो वहाँ से मेरी प्रक्रिया में कुछ गड़बड़ है या नहीं है।
req -new -x509
और x509 -req -signkey
दोनों स्व-हस्ताक्षरित सर्टिफिकेट के सीरियल को एक यादृच्छिक संख्या के रूप में डिफ़ॉल्ट करते हैं (हालांकि यह ओवरराइड किया जा सकता है) प्रभावी रूप से एक गैर। यदि आपके बच्चे के प्रमाण पत्र (या उनमें से कोई भी) में + जारीकर्ता + सीरियल ’विकल्प (id कीड’ विकल्प के अलावा) का उपयोग करके अथॉरिटीआईडेंटिफायर शामिल है, जो ca
अपस्ट्रीम डिफ़ॉल्ट डिफॉल्ट फाइल के साथ प्रयोग किए जाने पर होगा। पुराने के रूप में एक ही धारावाहिक के साथ नई जड़ बनाने की जरूरत है; उपयोग करें -set_serial
। ...