मैं OpenSSL का उपयोग करके SubjectAltName के साथ एक स्व-हस्ताक्षरित प्रमाण पत्र कैसे बना सकता हूं? [बन्द है]


115

मैं इसमें SubjectAltName के साथ OpenSSL के साथ एक स्व-हस्ताक्षरित प्रमाण पत्र जेनरेट करने का प्रयास कर रहा हूं। इसके बाद मैं प्रमाण पत्र के लिए सीएसआर जेनरेट कर रहा हूं, मेरा अनुमान है कि मुझे ओपनएसएसएल x509 के v3 एक्सटेंशन का उपयोग करना है। मै इस्तेमाल कर रहा हूँ :

openssl req -new -x509 -v3 -key private.key -out certificate.pem -days 730

कोई मुझे सटीक वाक्यविन्यास के साथ मदद कर सकता है?


2
यह भी देखें कि Opensl के साथ स्व-हस्ताक्षरित प्रमाण पत्र कैसे बनाएं? यह विषय वैकल्पिक नाम के साथ एक प्रमाण पत्र बनाने के लिए जानकारी प्रदान करता है, और आपको लागू करने वाले अन्य नियमों को बताता है ताकि प्रमाण पत्र के पास ब्राउज़रों और अन्य उपयोगकर्ता एजेंटों के साथ सफलता की सबसे बड़ी संभावना होगी।
jww

इस धागे के नीचे का जवाब ( stackoverflow.com/questions/27294589/… ) certificatetools.com का उपयोग करके आपको एक अच्छा परिणाम और एक उपयोगी cnf फ़ाइल मिलेगी
जेम्स नेल्सन

जवाबों:


164

कोई मुझे सटीक वाक्यविन्यास के साथ मदद कर सकता है?

यह एक तीन-चरण की प्रक्रिया है, और इसमें openssl.cnfफ़ाइल को संशोधित करना शामिल है । आप इसे केवल कमांड लाइन विकल्पों के साथ करने में सक्षम हो सकते हैं, लेकिन मैं इसे इस तरह से नहीं करता।

अपनी openssl.cnfफ़ाइल खोजें । यह संभावना में स्थित है /usr/lib/ssl/openssl.cnf:

$ find /usr/lib -name openssl.cnf
/usr/lib/openssl.cnf
/usr/lib/openssh/openssl.cnf
/usr/lib/ssl/openssl.cnf

मेरे डेबियन सिस्टम पर, /usr/lib/ssl/openssl.cnfअंतर्निहित opensslप्रोग्राम द्वारा उपयोग किया जाता है । हाल ही में डेबियन सिस्टम पर यह स्थित है/etc/ssl/openssl.cnf

आप यह निर्धारित कर सकते हैं कि फ़ाइल में openssl.cnfएक स्प्यूरियस जोड़कर उपयोग किया जा रहा है XXXऔर देखें कि क्या opensslचुटकुले हैं।


सबसे पहले, reqमापदंडों को संशोधित करें । उन नामों के साथ एक alternate_namesअनुभाग जोड़ें जिनका openssl.cnfआप उपयोग करना चाहते हैं। कोई मौजूदा alternate_namesअनुभाग नहीं हैं, इसलिए इससे कोई फर्क नहीं पड़ता कि आप इसे कहां जोड़ते हैं।

[ alternate_names ]

DNS.1        = example.com
DNS.2        = www.example.com
DNS.3        = mail.example.com
DNS.4        = ftp.example.com

इसके बाद, मौजूदा [ v3_ca ] अनुभाग में निम्नलिखित जोड़ें । सटीक स्ट्रिंग के लिए खोजें [ v3_ca ]:

subjectAltName      = @alternate_names

आप keyUsageनिम्न के लिए बदल सकते हैं [ v3_ca ]:

keyUsage = digitalSignature, keyEncipherment

digitalSignatureऔर keyEnciphermentसर्वर प्रमाणपत्र के लिए मानक किराया है। चिंता मत करो nonRepudiation। यह कंप्यूटर विज्ञान के लोगों / लड़कियों द्वारा बेकार किया गया एक बेकार सा विचार है जो वकील बनना चाहते थे। इसका मतलब कानूनी दुनिया में कुछ भी नहीं है।

अंत में, IETF ( RFC 5280 ), ब्राउज़र और CA तेज़ और ढीले चलते हैं, इसलिए यह संभवत: इससे कोई फर्क नहीं पड़ता कि आप क्या महत्वपूर्ण उपयोग प्रदान करते हैं।


दूसरा, हस्ताक्षर मापदंडों को संशोधित करें। इस लाइन को CA_defaultअनुभाग के अंतर्गत खोजें :

# Extension copying option: use with caution.
# copy_extensions = copy

और इसे बदलें:

# Extension copying option: use with caution.
copy_extensions = copy

यह सुनिश्चित करता है कि SAN प्रमाण पत्र में कॉपी किए गए हैं। DNS नामों को कॉपी करने के अन्य तरीके टूट गए हैं।


तीसरा, अपना स्व-हस्ताक्षरित प्रमाणपत्र बनाएं:

$ openssl genrsa -out private.key 3072
$ openssl req -new -x509 -key private.key -sha256 -out certificate.pem -days 730
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
...

अंत में, प्रमाणपत्र की जांच करें:

$ openssl x509 -in certificate.pem -text -noout
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 9647297427330319047 (0x85e215e5869042c7)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, ST=MD, L=Baltimore, O=Test CA, Limited, CN=Test CA/emailAddress=test@example.com
        Validity
            Not Before: Feb  1 05:23:05 2014 GMT
            Not After : Feb  1 05:23:05 2016 GMT
        Subject: C=US, ST=MD, L=Baltimore, O=Test CA, Limited, CN=Test CA/emailAddress=test@example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (3072 bit)
                Modulus:
                    00:e2:e9:0e:9a:b8:52:d4:91:cf:ed:33:53:8e:35:
                    ...
                    d6:7d:ed:67:44:c3:65:38:5d:6c:94:e5:98:ab:8c:
                    72:1c:45:92:2c:88:a9:be:0b:f9
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                34:66:39:7C:EC:8B:70:80:9E:6F:95:89:DB:B5:B9:B8:D8:F8:AF:A4
            X509v3 Authority Key Identifier:
                keyid:34:66:39:7C:EC:8B:70:80:9E:6F:95:89:DB:B5:B9:B8:D8:F8:AF:A4

            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Key Usage:
                Digital Signature, Non Repudiation, Key Encipherment, Certificate Sign
            X509v3 Subject Alternative Name:
                DNS:example.com, DNS:www.example.com, DNS:mail.example.com, DNS:ftp.example.com
    Signature Algorithm: sha256WithRSAEncryption
         3b:28:fc:e3:b5:43:5a:d2:a0:b8:01:9b:fa:26:47:8e:5c:b7:
         ...
         71:21:b9:1f:fa:30:19:8b:be:d2:19:5a:84:6c:81:82:95:ef:
         8b:0a:bd:65:03:d1

7
मैंने अभी-अभी उस फ़ाइल को खोला और स्थानीय स्तर पर समायोजित किया। फिर सब कुछ के साथ उत्पन्न: openssl genrsa -out cert.key 3072 -nodes openssl req -new -x509 -key cert.key -sha256 -config openssl.cnf -out cert.crt -days 730 -subj "/C=US/ST=private/L=province/O=city/CN=hostname.example.com"
stwienert

7
यहाँ वर्णित पर्यावरण चर का उपयोग करके इसे और अधिक लचीला बनाने के लिए एक अच्छी चाल भी है : subjectAltName=$ENV::ALTNAME(और env var सेट करें ALTNAME=DNS:example.com,DNS:other.example.net)।
ब्रूनो

6
नोट आप का उपयोग करने वाले IPके बजाय DNSके लिए alternate_namesआप एक आईपी पता के साथ काम कर रहे हैं। आप कॉन्फ़िगरेशन फ़ाइल को स्थानीय रूप से भी कॉपी कर सकते हैं और फिर इसे इसके साथ खुलता कमांड लाइन पर निर्दिष्ट कर सकते हैं -config my_config.cnf। और आपको असहज होना पड़ सकता है req_extensions = v3_req
एडवर्सस

5
मुझे यह OSX पर काम करने के लिए कभी नहीं मिला, लेकिन इस लिंक पर req.conf टेम्पलेट का उपयोग करके एक आकर्षण की तरह काम किया: support.citrix.com/article/CTX135602 (मैं एक उत्तर में विवरण निकालूंगा लेकिन यह प्रश्न अनजाने में बंद कर दिया गया है) )
rymo

3
किसी कारण से यह v3_ca सेक्शन के तहत subjectAltName = @alternate_names को पसंद नहीं करता है। क्या यह एक टाइपो हो सकता है? यहां मुझे त्रुटि मिली: त्रुटि: 22097069: X509 V3 दिनचर्या: DO_EXT_NCONF: अमान्य एक्सटेंशन स्ट्रिंग: v3_conf.c: 139: name = subjectAltName, अनुभाग = @ alternate_ames 140487468840608: त्रुटि: 22098080: X509 V3 दिनचर्या: X509 V3 दिनचर्या: X509 V3 दिनचर्या: X509 V3 दिनचर्या: v3_conf.c: 93: name = subjectAltName, value = @ alternate_names
जेम्स नेल्सन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.