Openssl के साथ एक स्व-हस्ताक्षरित प्रमाणपत्र कैसे बनाएं?



5 Answers

क्या मैं कुछ भूल रहा हूँ? क्या यह एक स्व-हस्ताक्षरित प्रमाणपत्र बनाने का सही तरीका है?

स्वयं हस्ताक्षरित प्रमाण पत्र बनाना आसान है। आप बस openssl req कमांड का उपयोग करें। ब्राउज़र बनाने और कमांड लाइन टूल्स जैसे ग्राहकों के सबसे बड़े चयन द्वारा उपभोग किया जा सकता है, इसे बनाने में मुश्किल हो सकती है।

यह मुश्किल है क्योंकि ब्राउज़रों के पास अपनी आवश्यकताओं का सेट है, और वे आईईटीएफ की तुलना में अधिक प्रतिबंधित हैं। ब्राउज़र द्वारा उपयोग की जाने वाली आवश्यकताओं को सीए / ब्राउज़र मंचों पर दस्तावेज किया गया है (नीचे संदर्भ देखें)। प्रतिबंध दो प्रमुख क्षेत्रों में उत्पन्न होते हैं: (1) ट्रस्ट एंकर, और (2) DNS नाम।

आधुनिक ब्राउज़र (जैसे वेरेज़ जो हम 2014/2015 में उपयोग कर रहे हैं) एक प्रमाण पत्र चाहते हैं जो एक ट्रस्ट एंकर पर वापस आ जाता है, और वे प्रमाणपत्र में विशेष रूप से DNS नाम प्रस्तुत करना चाहते हैं। और ब्राउज़र सक्रिय रूप से स्वयं हस्ताक्षरित सर्वर प्रमाणपत्रों के खिलाफ आगे बढ़ रहे हैं

कुछ ब्राउज़र बिल्कुल स्वयं हस्ताक्षरित सर्वर प्रमाणपत्र आयात करना आसान नहीं बनाते हैं। वास्तव में, आप एंड्रॉइड के ब्राउज़र की तरह कुछ ब्राउज़रों के साथ नहीं कर सकते हैं। तो पूरा समाधान अपना अधिकार बनना है।

अपना खुद का अधिकार बनने की अनुपस्थिति में, आपको प्रमाण पत्र को सफलता का सबसे बड़ा मौका देने के लिए DNS नाम सही प्राप्त करना होगा। लेकिन मैं आपको अपना अधिकार बनने के लिए प्रोत्साहित करता हूं। अपने स्वयं के अधिकार बनना आसान है और यह सभी ट्रस्ट मुद्दों को दूर करेगा (जो आपके से भरोसा करने के लिए बेहतर है?)।

यह शायद वह साइट नहीं है जिसे आप ढूंढ रहे हैं!
साइट का सुरक्षा प्रमाणपत्र विश्वसनीय नहीं है!

ऐसा इसलिए है क्योंकि ब्राउज़र सर्वर प्रमाणपत्रों को प्रमाणित करने के लिए ट्रस्ट एंकर की पूर्वनिर्धारित सूची का उपयोग करते हैं। एक स्वयं हस्ताक्षरित प्रमाणपत्र एक भरोसेमंद एंकर पर वापस नहीं आता है।

इससे बचने का सबसे अच्छा तरीका यह है:

  1. अपना अधिकार बनाएं (यानी, सीए बनें)
  2. सर्वर के लिए एक प्रमाणपत्र हस्ताक्षर अनुरोध (सीएसआर) बनाएँ
  3. अपने सीए कुंजी के साथ सर्वर के सीएसआर पर हस्ताक्षर करें
  4. सर्वर पर सर्वर प्रमाणपत्र स्थापित करें
  5. ग्राहक पर सीए प्रमाण पत्र स्थापित करें

चरण 1 - अपना स्वयं का अधिकार बनाएं CA: true साथ स्वयं हस्ताक्षरित प्रमाणपत्र बनाने का मतलब है CA: true और उचित कुंजी उपयोग। इसका मतलब है कि विषय और जारीकर्ता एक ही इकाई हैं, सीए मूलभूत प्रतिबंधों में सत्य पर सेट है (इसे भी महत्वपूर्ण के रूप में चिह्नित किया जाना चाहिए), मुख्य उपयोग कुंजी keyCertSign और crlSign (यदि आप सीआरएल का उपयोग कर रहे हैं), और विषय कुंजी पहचानकर्ता (एसकेआई ) प्राधिकरण कुंजी पहचानकर्ता (एकेआई) के समान है।

अपना खुद का प्रमाणपत्र प्राधिकरण बनने के लिए, आप अपने प्रमाणन प्राधिकरण के साथ प्रमाणपत्र हस्ताक्षर अनुरोध पर हस्ताक्षर कैसे करते हैं? स्टैक ओवरफ़्लो पर। फिर, ब्राउज़र द्वारा उपयोग किए गए ट्रस्ट स्टोर में अपना सीए आयात करें।

चरण 2 - 4 मोटे तौर पर आप सार्वजनिक सामना सर्वर के लिए क्या करते हैं जब आप Startcom या CAcert जैसे सीए की सेवाओं को सूचीबद्ध करते हैं। चरण 1 और 5 आपको तीसरे पक्ष के अधिकार से बचने और अपने अधिकार के रूप में कार्य करने की अनुमति देता है (जो खुद से भरोसा करने के लिए बेहतर है?)।

ब्राउज़र चेतावनी से बचने का अगला सबसे अच्छा तरीका सर्वर के प्रमाणपत्र पर भरोसा करना है। लेकिन कुछ ब्राउज़र, जैसे एंड्रॉइड के डिफ़ॉल्ट ब्राउज़र, आपको ऐसा करने नहीं देते हैं। तो यह मंच पर कभी काम नहीं करेगा।

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

डब्ल्यू 3 सी का वेब ऐपसेक वर्किंग ग्रुप इस मुद्दे को देखना शुरू कर रहा है। देखें, उदाहरण के लिए, प्रस्ताव: HTTP को गैर-सुरक्षित के रूप में चिह्नित करना

Openssl के साथ एक स्व-हस्ताक्षरित प्रमाणपत्र कैसे बनाएं?

नीचे दिए गए आदेश और कॉन्फ़िगरेशन फ़ाइल स्वयं हस्ताक्षरित प्रमाणपत्र बनाती है (यह आपको यह भी दिखाती है कि एक हस्ताक्षर अनुरोध कैसे बनाएं)। वे एक सम्मान में अन्य उत्तरों से अलग हैं: स्वयं हस्ताक्षरित प्रमाणपत्र के लिए उपयोग किए गए DNS नाम विषय वैकल्पिक नाम (SAN) में हैं , न कि सामान्य नाम (सीएन)

DNS नाम को कॉन्फ़िगरेशन फ़ाइल के माध्यम से SAN में रखा गया है जिसमें line subjectAltName = @alternate_names (कमांड लाइन के माध्यम से ऐसा करने का कोई तरीका नहीं है)। फिर कॉन्फ़िगरेशन फ़ाइल में एक alternate_names अनुभाग है (आपको इसे अपने स्वाद के अनुरूप ट्यून करना चाहिए):

[ alternate_names ]

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

# Add these if you need them. But usually you don't want them or
#   need them in production. You may need them for development.
# DNS.5       = localhost
# DNS.6       = localhost.localdomain
# DNS.7       = 127.0.0.1

# IPv6 localhost
# DNS.8     = ::1

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

यदि आप SAN में DNS नाम नहीं डालते हैं, तो प्रमाणपत्र ब्राउज़र और अन्य उपयोगकर्ता एजेंटों के अंतर्गत मान्य होने में विफल हो जाएगा जो सीए / ब्राउज़र फोरम दिशानिर्देशों का पालन करते हैं।

संबंधित: ब्राउज़र सीए / ब्राउज़र फोरम नीतियों का पालन करते हैं; और आईईटीएफ नीतियों नहीं। ओपनएसएसएल (जो आमतौर पर आईईटीएफ का पालन करता है) के साथ बनाए गए प्रमाण पत्र में से एक कारण है कभी-कभी ब्राउज़र के अंतर्गत मान्य नहीं होता है (ब्राउज़र सीए / बी का पालन करते हैं)। वे अलग-अलग मानक हैं, उनके पास अलग-अलग जारी नीतियां और विभिन्न सत्यापन आवश्यकताओं हैं।

स्वयं हस्ताक्षरित प्रमाणपत्र बनाएं ( -x509 विकल्प के अतिरिक्त नोटिस):

openssl req -config example-com.conf -new -x509 -sha256 -newkey rsa:2048 -nodes \
    -keyout example-com.key.pem -days 365 -out example-com.cert.pem

एक हस्ताक्षर अनुरोध बनाएं ( -x509 विकल्प की कमी -x509 ):

openssl req -config example-com.conf -new -sha256 -newkey rsa:2048 -nodes \
    -keyout example-com.key.pem -days 365 -out example-com.req.pem

एक स्व हस्ताक्षरित प्रमाण पत्र मुद्रित करें :

openssl x509 -in example-com.cert.pem -text -noout

एक हस्ताक्षर अनुरोध मुद्रित करें :

openssl req -in example-com.req.pem -text -noout

कॉन्फ़िगरेशन फ़ाइल ( -config विकल्प के माध्यम से पारित)

[ req ]
default_bits        = 2048
default_keyfile     = server-key.pem
distinguished_name  = subject
req_extensions      = req_ext
x509_extensions     = x509_ext
string_mask         = utf8only

# The Subject DN can be formed using X501 or RFC 4514 (see RFC 4519 for a description).
#   Its sort of a mashup. For example, RFC 4514 does not provide emailAddress.
[ subject ]
countryName         = Country Name (2 letter code)
countryName_default     = US

stateOrProvinceName     = State or Province Name (full name)
stateOrProvinceName_default = NY

localityName            = Locality Name (eg, city)
localityName_default        = New York

organizationName         = Organization Name (eg, company)
organizationName_default    = Example, LLC

# Use a friendly name here because its presented to the user. The server's DNS
#   names are placed in Subject Alternate Names. Plus, DNS names here is deprecated
#   by both IETF and CA/Browser Forums. If you place a DNS name here, then you 
#   must include the DNS name in the SAN too (otherwise, Chrome and others that
#   strictly follow the CA/Browser Baseline Requirements will fail).
commonName          = Common Name (e.g. server FQDN or YOUR name)
commonName_default      = Example Company

emailAddress            = Email Address
emailAddress_default        = test@example.com

# Section x509_ext is used when generating a self-signed certificate. I.e., openssl req -x509 ...
[ x509_ext ]

subjectKeyIdentifier        = hash
authorityKeyIdentifier  = keyid,issuer

# You only need digitalSignature below. *If* you don't allow
#   RSA Key transport (i.e., you use ephemeral cipher suites), then
#   omit keyEncipherment because that's key transport.
basicConstraints        = CA:FALSE
keyUsage            = digitalSignature, keyEncipherment
subjectAltName          = @alternate_names
nsComment           = "OpenSSL Generated Certificate"

# RFC 5280, Section 4.2.1.12 makes EKU optional
#   CA/Browser Baseline Requirements, Appendix (B)(3)(G) makes me confused
#   In either case, you probably only need serverAuth.
# extendedKeyUsage  = serverAuth, clientAuth

# Section req_ext is used when generating a certificate signing request. I.e., openssl req ...
[ req_ext ]

subjectKeyIdentifier        = hash

basicConstraints        = CA:FALSE
keyUsage            = digitalSignature, keyEncipherment
subjectAltName          = @alternate_names
nsComment           = "OpenSSL Generated Certificate"

# RFC 5280, Section 4.2.1.12 makes EKU optional
#   CA/Browser Baseline Requirements, Appendix (B)(3)(G) makes me confused
#   In either case, you probably only need serverAuth.
# extendedKeyUsage  = serverAuth, clientAuth

[ alternate_names ]

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

# Add these if you need them. But usually you don't want them or
#   need them in production. You may need them for development.
# DNS.5       = localhost
# DNS.6       = localhost.localdomain
# DNS.7       = 127.0.0.1

# IPv6 localhost
# DNS.8     = ::1

आपको क्रोम के लिए निम्न कार्य करने की आवश्यकता हो सकती है। अन्यथा क्रोम एक सामान्य नाम की शिकायत कर सकता है अमान्य है ( ERR_CERT_COMMON_NAME_INVALID ) । मुझे यकीन नहीं है कि SAN में एक आईपी पते और इस उदाहरण में एक सीएन के बीच संबंध क्या है।

# IPv4 localhost
# IP.1       = 127.0.0.1

# IPv6 localhost
# IP.2     = ::1

X.50 9 / PKIX प्रमाणपत्रों में DNS नामों के संचालन से संबंधित अन्य नियम हैं। नियमों के लिए इन दस्तावेजों का संदर्भ लें:

आरएफसी 6797 और आरएफसी 7469 सूचीबद्ध हैं क्योंकि वे अन्य आरएफसी और सीए / बी दस्तावेजों की तुलना में अधिक प्रतिबंधित हैं। आरएफसी के 6797 और 7469 आईपी पते की इजाजत नहीं देते हैं।

Question

मैं एम्बेडेड लिनक्स डिवाइस में https समर्थन जोड़ रहा हूं। मैंने इन चरणों के साथ एक स्व-हस्ताक्षरित प्रमाण पत्र उत्पन्न करने का प्रयास किया है:

openssl req -new > cert.csr
openssl rsa -in privkey.pem -out key.pem
openssl x509 -in cert.csr -out cert.pem -req -signkey key.pem -days 1001
cat key.pem>>cert.pem

यह काम करता है, लेकिन मुझे कुछ त्रुटियां मिलती हैं, उदाहरण के लिए, Google क्रोम:

यह शायद वह साइट नहीं है जिसे आप ढूंढ रहे हैं!
साइट का सुरक्षा प्रमाणपत्र विश्वसनीय नहीं है!

क्या मैं कुछ भूल रहा हूँ? क्या यह एक स्व-हस्ताक्षरित प्रमाणपत्र बनाने का सही तरीका है?




कुंजी उत्पन्न करें

मैं प्रमाणपत्र भंडारण के लिए /etc/mysql का उपयोग कर रहा हूं क्योंकि /etc/apparmor.d/usr.sbin.mysqld में /etc/mysql/*.pem r

sudo su -
cd /etc/mysql
openssl genrsa -out ca-key.pem 2048;
openssl req -new -x509 -nodes -days 1000 -key ca-key.pem -out ca-cert.pem;
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem -out server-req.pem;
openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem;
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem -out client-req.pem;
openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem;

कॉन्फ़िगरेशन जोड़ें

/etc/mysql/my.cnf

[client]
ssl-ca=/etc/mysql/ca-cert.pem
ssl-cert=/etc/mysql/client-cert.pem
ssl-key=/etc/mysql/client-key.pem

[mysqld]
ssl-ca=/etc/mysql/ca-cert.pem
ssl-cert=/etc/mysql/server-cert.pem
ssl-key=/etc/mysql/server-key.pem

मेरे सेटअप पर, ubuntu सर्वर लॉग इन: /var/log/mysql/error.log

नोट्स का पालन करें:

  • SSL error: Unable to get certificate from '...'

    MySQL को आपकी प्रमाणपत्र फ़ाइल में पढ़ने की पहुंच से वंचित कर दिया जा सकता है यदि यह एपर्मर्स कॉन्फ़िगरेशन में नहीं है । जैसा कि पिछले चरणों में उल्लिखित है ^, हमारे सभी कर्ट को /etc/mysql/ निर्देशिका में .pem फ़ाइलों के रूप में सहेजें, जिसे एपर्मर द्वारा डिफ़ॉल्ट रूप से अनुमोदित किया गया है (या अपने एपर्मर / SELinux को संशोधित करें जहां आप उन्हें संग्रहीत करते हैं।)

  • SSL error: Unable to get private key

    आपका mysql सर्वर संस्करण डिफ़ॉल्ट rsa:2048 प्रारूप का समर्थन नहीं कर सकता है।

    गुप्त उत्पन्न rsa:2048 सादे rsa साथ:

    openssl rsa -in server-key.pem -out server-key.pem
    openssl rsa -in client-key.pem -out client-key.pem
    
  • जांचें कि क्या स्थानीय सर्वर एसएसएल का समर्थन करता है :

    mysql -u root -p
    mysql> show variables like "%ssl%"; 
    +---------------+----------------------------+
    | Variable_name | Value                      |
    +---------------+----------------------------+
    | have_openssl  | YES                        |
    | have_ssl      | YES                        |
    | ssl_ca        | /etc/mysql/ca-cert.pem     |
    | ssl_capath    |                            |
    | ssl_cert      | /etc/mysql/server-cert.pem |
    | ssl_cipher    |                            |
    | ssl_key       | /etc/mysql/server-key.pem  |
    +---------------+----------------------------+
    
  • डीबी से कनेक्शन सत्यापित करना एसएसएल एन्क्रिप्टेड है :

    कनेक्शन की पुष्टि

    MySQL इंस्टेंस में लॉग इन होने पर, आप क्वेरी जारी कर सकते हैं:

    show status like 'Ssl_cipher'; 
    

    यदि आपका कनेक्शन एन्क्रिप्ट नहीं किया गया है, तो परिणाम खाली होगा:

    mysql> show status like 'Ssl_cipher'; 
    +---------------+-------+ 
    | Variable_name | Value | 
    +---------------+-------+ 
    | Ssl_cipher    |       |  
    +---------------+-------+ 
    1 row in set (0.00 sec) 
    

    अन्यथा, यह उपयोग में साइफर के लिए एक गैर-शून्य लंबाई स्ट्रिंग दिखाएगा:

    mysql> show status like 'Ssl_cipher'; 
    +---------------+--------------------+ 
    | Variable_name | Value              | 
    +---------------+--------------------+ 
    | Ssl_cipher    | DHE-RSA-AES256-SHA |  
    +---------------+--------------------+ 
    1 row in set (0.00 sec) 
    
  • विशिष्ट उपयोगकर्ता के कनेक्शन के लिए एसएसएल की आवश्यकता है ('एसएसएल की आवश्यकता है'):

    • एसएसएल

    सर्वर को खाते के लिए केवल SSL-एन्क्रिप्टेड कनेक्शन की अनुमति देने के लिए कहता है।

    GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost'
      REQUIRE SSL;
    

    कनेक्ट करने के लिए, क्लाइंट को सर्वर प्रमाणपत्र प्रमाणित करने के लिए --ssl-ca विकल्प निर्दिष्ट करना होगा, और अतिरिक्त रूप से --ssl-key और --ssl-cert विकल्प निर्दिष्ट कर सकते हैं। यदि न तो --ssl-ca विकल्प और न ही --ssl-capath विकल्प निर्दिष्ट है, तो क्लाइंट सर्वर प्रमाणपत्र प्रमाणित नहीं करता है।

वैकल्पिक लिंक: यहां लंबा ट्यूटोरियल http://www.madirish.net/214




मैं SHA-2 हैश एल्गोरिदम का उपयोग करने के लिए -sha256 पैरामीटर जोड़ने की अनुशंसा करता हूं, क्योंकि प्रमुख ब्राउज़र "SHA-1 प्रमाणपत्र" को सुरक्षित नहीं मानते हैं।

स्वीकृत उत्तर से एक ही कमांड लाइन - जोड़ा-sha256 के साथ @diegows

openssl req -x509 -sha256 -newkey आरएसए: 2048 -keyout key.pem -out cert.pem -days XXX

Google सुरक्षा ब्लॉग में अधिक जानकारी।




मैं टिप्पणी नहीं कर सकता, इसलिए इसे एक अलग उत्तर के रूप में रखेगा। मुझे स्वीकार किए गए एक-लाइनर उत्तर के साथ कुछ समस्याएं मिलीं:

  • एक लाइनर में कुंजी में एक पासफ्रेज शामिल है।
  • एक-लाइनर SHA1 का उपयोग करता है जो कई ब्राउज़रों में कंसोल में चेतावनियां फेंकता है।

यहां एक सरलीकृत संस्करण है जो पासफ्रेज को हटा देता है, चेतावनियों को दबाने के लिए सुरक्षा को बढ़ाता है और पूर्ण प्रश्न सूची को हटाने के लिए -subj में पास करने के लिए टिप्पणियों में एक सुझाव शामिल करता है:

openssl genrsa -out server.key 2048
openssl rsa -in server.key -out server.key
openssl req -sha256 -new -key server.key -out server.csr -subj '/CN=localhost'
openssl x509 -req -sha256 -days 365 -in server.csr -signkey server.key -out server.crt

आपको जो भी डोमेन चाहिए, उसके साथ 'लोकलहोस्ट' को बदलें। आपको पहले दो आदेशों को एक-एक करके चलाने की आवश्यकता होगी क्योंकि openssl पासफ्रेज़ के लिए संकेत देगा।

दोनों को .pem फ़ाइल में गठबंधन करने के लिए:

cat server.crt server.key > cert.pem



यह वह स्क्रिप्ट है जिसका उपयोग मैं स्थानीय बॉक्स पर SAN (subjectAltName) को स्वयं-हस्ताक्षरित प्रमाणपत्रों में सेट करने के लिए करता हूं।

यह स्क्रिप्ट डोमेन नाम (example.com) लेती है और उसी प्रमाणपत्र में * .example.com और example.com के लिए SAN उत्पन्न करती है। नीचे दिए गए अनुभागों पर टिप्पणी की गई है। स्क्रिप्ट का नाम दें (उदाहरण के लिए generate-ssl.sh ) और इसे निष्पादन योग्य अनुमति दें। फ़ाइलों को स्क्रिप्ट के समान निर्देशिका में लिखा जाएगा।

क्रोम 58 को आगे की ओर SAN को स्वयं-हस्ताक्षरित प्रमाणपत्रों में सेट करने की आवश्यकता होती है।

#!/usr/bin/env bash

# Set the TLD domain we want to use
BASE_DOMAIN="example.com"

# Days for the cert to live
DAYS=1095

# A blank passphrase
PASSPHRASE=""

# Generated configuration file
CONFIG_FILE="config.txt"

cat > $CONFIG_FILE <<-EOF
[req]
default_bits = 2048
prompt = no
default_md = sha256
x509_extensions = v3_req
distinguished_name = dn

[dn]
C = CA
ST = BC
L = Vancouver
O = Example Corp
OU = Testing Domain
emailAddress = webmaster@$BASE_DOMAIN
CN = $BASE_DOMAIN

[v3_req]
subjectAltName = @alt_names

[alt_names]
DNS.1 = *.$BASE_DOMAIN
DNS.2 = $BASE_DOMAIN
EOF

# The file name can be anything
FILE_NAME="$BASE_DOMAIN"

# Remove previous keys
echo "Removing existing certs like $FILE_NAME.*"
chmod 770 $FILE_NAME.*
rm $FILE_NAME.*

echo "Generating certs for $BASE_DOMAIN"

# Generate our Private Key, CSR and Certificate
# Use SHA-2 as SHA-1 is unsupported from Jan 1, 2017

openssl req -new -x509 -newkey rsa:2048 -sha256 -nodes -keyout "$FILE_NAME.key" -days $DAYS -out "$FILE_NAME.crt" -passin pass:$PASSPHRASE -config "$CONFIG_FILE"

# OPTIONAL - write an info to see the details of the generated crt
openssl x509 -noout -fingerprint -text < "$FILE_NAME.crt" > "$FILE_NAME.info"

# Protect the key
chmod 400 "$FILE_NAME.key"

यह स्क्रिप्ट एक सूचना फ़ाइल भी लिखती है ताकि आप नए प्रमाणपत्र का निरीक्षण कर सकें और सत्यापित कर सकें कि SAN ठीक से सेट है।

                ...
                28:dd:b8:1e:34:b5:b1:44:1a:60:6d:e3:3c:5a:c4:
                da:3d
            Exponent: 65537 (0x10001)
    X509v3 extensions:
        X509v3 Subject Alternative Name: 
            DNS:*.example.com, DNS:example.com
Signature Algorithm: sha256WithRSAEncryption
     3b:35:5a:d6:9e:92:4f:fc:f4:f4:87:78:cd:c7:8d:cd:8c:cc:
     ...

यदि आप अपाचे का उपयोग कर रहे हैं, तो आप उपरोक्त प्रमाणपत्र को अपनी कॉन्फ़िगरेशन फ़ाइल में संदर्भित कर सकते हैं जैसे:

<VirtualHost _default_:443>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/htdocs

    SSLEngine on
    SSLCertificateFile path/to/your/example.com.crt
    SSLCertificateKeyFile path/to/your/example.com.key
</VirtualHost>

नए प्रमाणपत्र को प्रभावी होने के लिए अपने अपाचे (या Nginx, या IIS) सर्वर को पुनरारंभ करना याद रखें।




आपके पास सामान्य प्रक्रिया सही है। आदेश के लिए वाक्यविन्यास नीचे है।

openssl req -new -key {private key file} -out {output file}

हालांकि, चेतावनियां प्रदर्शित की जाती हैं क्योंकि ब्राउज़र किसी ज्ञात प्रमाणपत्र प्राधिकरण (सीए) के साथ प्रमाण पत्र को सत्यापित करके पहचान सत्यापित करने में सक्षम नहीं था।

चूंकि यह एक स्वयं हस्ताक्षरित प्रमाण है, वहां कोई सीए नहीं है और आप सुरक्षित रूप से चेतावनी को अनदेखा कर सकते हैं और आगे बढ़ सकते हैं। क्या आप एक वास्तविक प्रमाण प्राप्त करना चाहते हैं जो सार्वजनिक इंटरनेट पर किसी के द्वारा पहचाना जा सके तो प्रक्रिया नीचे है।

  1. एक निजी कुंजी उत्पन्न करें
  2. एक सीएसआर फ़ाइल बनाने के लिए उस निजी कुंजी का प्रयोग करें
  3. सीएआर को सीएआर (Verisign या अन्य आदि) जमा करें
  4. वेब सर्वर पर सीए से प्राप्त प्रमाण पत्र स्थापित करें
  5. टाइप प्रमाण के आधार पर प्रमाणीकरण श्रृंखला में अन्य कर्ट जोड़ें

मेरे पास इस पोस्ट के बारे में अधिक जानकारी है https://bigthinkingapplied.com/secure-the-connection-installing-certificates-on-3-common-web-servers/




Related