ऐसे कई बेहतरीन जवाब हैं जो इस बात का उदाहरण देते हैं कि इस काम को कैसे किया जाए, लेकिन कोई भी यह नहीं बताता है कि आपके प्रयास में चीजें कहां गलत हुईं। ओपनएसएसएल कुछ समय के लिए बहुत सहज नहीं हो सकता है, इसलिए यह चलने के लायक है।
सबसे पहले, एक तरफ के रूप में, ओपनएसएसएल आपको किसी भी विशिष्ट नाम मान को अनदेखा करने के लिए डिफॉल्ट करता है जो आप कॉन्फ़िगरेशन में प्रदान करते हैं। यदि आप उनका उपयोग करना चाहते हैं तो आपको prompt = no
अपने विन्यास में जोड़ना होगा । इसके अतिरिक्त, जैसा कि लिखा गया आदेश केवल एक प्रमाणपत्र अनुरोध बनाता है
न कि स्वयं एक प्रमाण पत्र -days
।
यदि आप इस आदेश का उपयोग करके अपना प्रमाणपत्र अनुरोध उत्पन्न करते हैं और परिणाम का निरीक्षण करते हैं, तो विषय Alt नाम मौजूद है:
$ openssl req -new -key server.key -out server.csr -config config.cnf -sha256
$ openssl req -text -noout -in server.csr
Certificate Request:
Data:
Version: 1 (0x0)
Subject: C = US, ST = Massachusetts, L = Boston, O = MyCompany
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
...
Exponent: 65537 (0x10001)
Attributes:
Requested Extensions:
X509v3 Subject Alternative Name:
DNS:dev.mycompany.com
Signature Algorithm: sha256WithRSAEncryption
...
लेकिन तब यदि आप heroku लिंक में कमांड का उपयोग करके प्रमाण पत्र उत्पन्न करते हैं और परिणाम का निरीक्षण करते हैं, तो विषय Alt नाम गायब है:
$ openssl x509 -req -sha256 -days 365 -in server.csr -signkey server.key -out server.crt
$ openssl x509 -text -noout -in server.crt
Certificate:
Data:
Version: 1 (0x0)
Serial Number:
89:fd:75:26:43:08:04:61
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = US, ST = Massachusetts, L = Boston, O = MyCompany
Validity
Not Before: Jan 21 04:27:21 2018 GMT
Not After : Jan 21 04:27:21 2019 GMT
Subject: C = US, ST = Massachusetts, L = Boston, O = MyCompany
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
...
Exponent: 65537 (0x10001)
Signature Algorithm: sha256WithRSAEncryption
...
कारण यह है कि डिफ़ॉल्ट रूप से ओपनएसएसएल प्रमाणपत्र के अनुरोध से एक्सटेंशन की प्रतिलिपि नहीं करता है। आम तौर पर, एक ग्राहक से अनुरोध के आधार पर, CA द्वारा प्रमाण पत्र बनाया / हस्ताक्षरित किया जाएगा, और कुछ एक्सटेंशन CA से अधिक शक्ति प्रदान कर सकते हैं यदि वे अनुरोध में परिभाषित एक्सटेंशन पर आँख बंद करके भरोसा करना चाहते थे।
एक्सटेंशन को कॉपी करने के लिए ओपनएसएसएल को बताने के तरीके हैं, लेकिन जब आप प्रमाण पत्र उत्पन्न करते हैं तो आईएमएचओ एक कॉन्फ़िगरेशन फ़ाइल में एक्सटेंशन प्रदान करने की तुलना में अधिक काम करता है।
यदि आप अपनी मौजूदा कॉन्फ़िग फ़ाइल का उपयोग करने का प्रयास कर रहे थे, तो यह काम नहीं करेगा क्योंकि शीर्ष स्तर अनुभाग को चिह्नित किया गया है, [req]
इसलिए वे सेटिंग्स केवल रीक कमांड पर लागू होती हैं न कि x509 कमांड। शीर्ष-स्तरीय अनुभाग मार्कर होना आवश्यक नहीं है, इसलिए आप बस उस पहली पंक्ति को हटा सकते हैं, और फिर यह अनुरोध या प्रमाणपत्र उत्पन्न करने के लिए ठीक काम करेगा।
$ openssl x509 -req -sha256 -days 365 -in server.csr -signkey server.key -out server.crt -extfile config.cnf
वैकल्पिक रूप से, आप पहले एक अनुरोध बनाने और फिर एक प्रमाण पत्र बनाने के बजाय, एक आदेश में एक स्व-हस्ताक्षरित प्रमाण पत्र बनाने के -x509
लिए req
आदेश का उपयोग कर सकते हैं । इस मामले में [req]
अनुभाग लाइन को हटाना आवश्यक नहीं है
, क्योंकि उस खंड को रीड कमांड द्वारा पढ़ा और उपयोग किया जाता है।
$ openssl req -x509 -sha256 -days 365 -key server.key -out server.crt -config config.cnf
पुनर्कथन करने के लिए, ऊपर दी गई कमांड में प्रयुक्त संशोधित विन्यास फाइल है:
default_bits = 2048
distinguished_name = dn
x509_extensions = san
req_extensions = san
extensions = san
prompt = no
[ dn ]
countryName = US
stateOrProvinceName = Massachusetts
localityName = Boston
organizationName = MyCompany
[ san ]
subjectAltName = DNS:dev.mycompany.com
-config <(cat /System/Library/OpenSSL/openssl.cnf ; printf '[SAN]\nsubjectAltName=DNS:dev.mycompany.com')