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


23

मैंने पासवर्ड और रूट के रूप में निम्न फ़ील्ड्स के साथ किया था

openssl req -x509 -days 365 -newkey rsa:2048 -keyout /etc/ssl/apache.key \
    -out /etc/ssl/apache.crt

खेत

Country: FI
State: Pirkanmaa
Locality: Tampere
Organization: masi
Organizational Unit Name: SSL Certificate Test
CommonName: 192.168.1.107/owncloud
EmailAddress: masi@gmail.com

आउटपुट: HTTPS में SSL हैंडशेक त्रुटि। अपेक्षित आउटपुट: HTTPS कनेक्शन। HTTP काम करता है।

कॉमननेम में वह URL शामिल होना चाहिए जहाँ आप जाना चाहते हैं, यहाँ पर स्वयं का थ्रेड है । मैंने सामान्यनाम में असफल प्रयास किया है

  • 192.168.1.107/owncloud
  • 192.168.1.107/

सर्वर के लिए टेस्ट ओएस: डेबियन 8.5।
सर्वर: रास्पबेरी पाई 3 बी। स्वयं का-सर्वर: 8.2.5। स्वयं का ग्राहक: 2.1.1। सिस्टम-क्लाइंट: डेबियन 8.5।


यदि आप लोकलहोस्ट के लिए SAN का उपयोग करके नया एसएसएल प्रमाणपत्र जेनरेट करना चाह रहे हैं, तो इस पोस्ट के चरणों ने मेरे लिए काम किया Centos 7 / Vagrant / Chrome Browser
दामोदर बशयाल

@DamodarBashyal कृपया, केवल उत्तर ही नहीं, बल्कि कुछ विवरण भी उत्तर के रूप में दें।
लेओ लेपोल्ड हर्ट्ज़ '

जवाबों:


11

Opensl req -x509 -days 365 -newkey rsa: 2048 -keyout /etc/ssl/apache.key -out /etc/ssl/apache.crt

एक अच्छी तरह से गठित X.509 प्रमाणपत्र बनाने के लिए आप इस कमांड का उपयोग नहीं कर सकते। यह विकृत हो जाएगा क्योंकि होस्टनाम को सामान्य नाम (CN) में रखा गया है । CN में एक होस्टनाम या IP पता रखने से IETF (अधिकांश उपकरण, लाइक wgetऔर curl) और CA / B फ़ोरम (CA's और ब्राउज़र्स) दोनों को हटा दिया जाता है ।

IETF और CA / B दोनों मंचों के अनुसार, सर्वर नाम और IP पते हमेशा विषय वैकल्पिक नाम (SAN) में जाते हैं । नियमों के लिए, RFC 5280, इंटरनेट X.509 सार्वजनिक कुंजी अवसंरचना प्रमाणपत्र और प्रमाणपत्र निरस्तीकरण सूची (CRL) प्रोफ़ाइल और CA / ब्राउज़र फ़ोरम बेसलाइन आवश्यकताएँ देखें

आपको ज्यादातर अपनी आवश्यकताओं के अनुरूप एक ओपनएसएसएल कॉन्फ़िगरेशन फ़ाइल का उपयोग करना होगा और इसे दर्जी करना होगा। नीचे एक मैं उपयोग का एक उदाहरण है। इसे कहा जाता है example-com.conf, और यह OpenSSL कमांड से होकर गुजरा है -config example-com.conf


इसके अलावा अच्छी तरह से ध्यान दें : सभी मशीनों होने का दावा localhost, localhost.localdomainआदि के लिए प्रमाण पत्र जारी करने के बारे में सावधान रहें localhost। मैं यह नहीं कर रहा हूँ नहीं कह रहा हूँ ; बस समझिए कि इसमें कुछ जोखिम शामिल हैं।

इसके विकल्प localhost: (1) डीएनएस चलाते हैं और मशीन के डीएनएस नाम से प्रमाणपत्र जारी करते हैं। या, (2) स्टेटिक आईपी का उपयोग करते हैं और इसमें स्टेटिक आईपी एड्रेस शामिल होता है।


ब्राउजर अभी भी आपको एक स्व-हस्ताक्षरित प्रमाणपत्र के बारे में चेतावनी देगा जो एक विश्वसनीय रूट पर वापस नहीं जाता है। जैसे उपकरण curlऔर wgetशिकायत नहीं करेंगे, लेकिन आपको अभी भी विश्वास करने की आवश्यकता है कि आप स्वयं को cURL जैसे विकल्प के साथ साइन इन करें --cafile। ब्राउज़र ट्रस्ट समस्या को दूर करने के लिए, आपको अपना स्वयं का CA बनना होगा।

"अपने खुद के सीए बनना" एक निजी पीकेआई चलाने के रूप में जाना जाता है। इसमें बहुत कुछ नहीं है। आप एक सार्वजनिक CA कर सकते हैं सब कुछ कर सकते हैं। केवल एक चीज अलग है आपको विभिन्न दुकानों में अपना रूट CA प्रमाणपत्र स्थापित करना होगा । CURL का उपयोग करते हुए, यह कहना अलग नहीं है cacerts.pmcacerts.pmबस रूट CA का संग्रह है, और अब आप क्लब में शामिल हो गए हैं।

यदि आप अपने स्वयं के सीए बन जाते हैं, तो अपनी रूट सीए निजी कुंजी को डिस्क और इसे ऑफ़लाइन रखने के लिए जलाना सुनिश्चित करें। जब आप एक हस्ताक्षर अनुरोध पर हस्ताक्षर करने की आवश्यकता होती है तो इसे अपनी सीडी / डीवीडी ड्राइव में पॉप करें। अब आप सार्वजनिक CA की तरह ही प्रमाणपत्र जारी कर रहे हैं।

एक या दो हस्ताक्षर करने के अनुरोध पर हस्ताक्षर करने के बाद इनमें से कोई भी बहुत मुश्किल नहीं है। मैं घर पर सालों से प्राइवेट पीकेआई चला रहा हूं। मेरे सभी उपकरण और गैजेट मेरे CA पर भरोसा करते हैं।

अपने स्वयं के सीए बनने के बारे में अधिक जानकारी के लिए, आप अपने प्रमाणन प्राधिकरण के साथ प्रमाणपत्र साइनिंग अनुरोध पर हस्ताक्षर कैसे करते हैं और ओप्सनल के साथ स्व-हस्ताक्षरित प्रमाण पत्र कैसे बना सकते हैं?


नीचे कॉन्फ़िगरेशन फ़ाइल में टिप्पणियों से ...

स्व हस्ताक्षरित (-5050 के अतिरिक्त पर ध्यान दें)

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

हस्ताक्षर का अनुरोध (-5050 की कमी पर ध्यान दें)

openssl req -config example-com.conf -new -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

विन्यास फाइल

# Self Signed (note the addition of -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
# Signing Request (note the lack of -x509):
#     openssl req -config example-com.conf -new -newkey rsa:2048 -nodes -keyout example-com.key.pem -days 365 -out example-com.req.pem
# Print it:
#     openssl x509 -in example-com.cert.pem -text -noout
#     openssl req -in example-com.req.pem -text -noout

[ 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).
#   It's 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 it's 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

#  If RSA Key Transport bothers you, then remove keyEncipherment. TLS 1.3 is removing RSA
#  Key Transport in favor of exchanges with Forward Secrecy, like DHE and ECDHE.
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
# 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
# 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
# DNS.9     = fe80::1

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

# IPv4 localhost
# IP.1       = 127.0.0.1

# IPv6 localhost
# IP.2     = ::1

क्या आप कृपया कॉन्फ़िग फ़ाइल में डिफ़ॉल्ट पथ जोड़ सकते हैं? - - क्या आप कृपया पूर्ण कार्य प्रवाह दिखा सकते हैं? Opensl कमांड आदि के लिए फाइल पास करने के बारे में - - मैंने पिछले उत्तर के साथ सफल होने का प्रबंधन नहीं किया, इसलिए सभी आवश्यक टुकड़ों की सराहना की जाती है।
लेओ लेपोल्ड हर्ट्ज़ '

@ मासी - "क्या आप कृपया कॉन्फ़िगर फ़ाइल में डिफ़ॉल्ट पथ जोड़ सकते हैं?" - पक्का नहीं आपका क्या मतलब है। आप जहां चाहें इसे सहेज सकते हैं। मैं इसे कई मशीनों पर डेस्कटॉप से ​​चलाता हूं, और दूसरों पर मेरी होम निर्देशिका। मैंने देखा तुम इस्तेमाल किया sudo। हो सकता है कि आपकी .rndफ़ाइल के स्वामित्व में हो root। यदि हां, तो प्रयास करें sudo chown -R masi:masi /home/masi। तब आप इससे पढ़ सकेंगे और इसे लिख सकेंगे।

मैं अब केवल डेबियन का उपयोग कर रहा हूं, उबंटू का नहीं, इसलिए केवल रूट। कृपया, अपने काम के प्रवाह को डेस्कटॉप में Keepinv फ़ाइल के बारे में एक उदाहरण के रूप में जोड़ें और आगे बढ़ें। मेरे पास सिस्टम के बारे में स्पष्ट तस्वीर नहीं है।
लेओ लेपोल्ड हर्ट्ज़ '

1
फ़ाइल के शीर्ष पर सूचीबद्ध आदेशों में से एक को चलाएँ। टिप्पणियां कॉपी / पेस्ट के लिए हैं। वह चुनें जो आपके स्वाद को सूट करता है। यदि आप अभी भी स्व-हस्ताक्षरित जनरेट करने का प्रयास कर रहे हैं, तो आप x509इसके साथ कमांड चलाते हैं (जैसा टिप्पणी कहते हैं)।

लेखक ने "सीए / बी परिवर्तनों के कारण" इस पोस्ट को हटाने का अनुरोध किया, लेकिन वोटों की संख्या और संभावित सहायता के कारण यह वर्षों से उपलब्ध है, मैंने इसे बहाल कर दिया है। जब यह दिया गया था के रूप में पोस्ट में सलाह ले लो।
जेफ स्कालर

1

CommonNameजो कुछ भी रूप में भेजा जाता है के अनुरूप होना चाहिए Host: HTTP अनुरोध में शीर्ष लेख। आपके मामले में, यह होगा 192.168.1.107 (बिना किसी स्लैश के)।

वेब सर्वर के लिए होस्टनाम कॉन्फ़िगर करें

व्यक्तिगत रूप से, मैं वेब सर्वर के लिए एक अनुकूल होस्टनाम कॉन्फ़िगर करूंगा। आपके मेल अपाचे कॉन्फ़िगरेशन या वर्चुअल होस्ट कॉन्फ़िगरेशन ( /etc/apache2/sites-enabled/000-default.confडेबियन-आधारित वितरण के लिए होने की संभावना ) में, ServerNameया ServerAliasनिर्देश का उपयोग करें , जैसे,

ServerName owncloud.masi

Apache को पुनरारंभ करें और फिर DNS या कॉन्फ़िगर करें (और अधिक सरल रूप से) प्रत्येक क्लाइंट के /etc/hostsलिए सही आईपी एड्रेस को इंगित करने के लिए एक प्रविष्टि जोड़ें , जैसे,

192.168.1.107   owncloud.masi

मेरी खुद की पहुँच है 192.168.1.107। दूसरा सूत्र कहता है कि आपको उपडोमेन को शामिल करना चाहिए। मुझे लगता है कि इसका मतलब है 192.168.1.107/owncloud। हालांकि, मैं गलत हो सकता हूं।
लेओ लेपोल्ड हर्ट्ज़ o

आप का उपयोग मान लें ServerName owncloud.masiमें .../sites-enabled/000-default.conf। है CommonName एसएसएल कुंजी तो owncloud.masi ?
लेओ लेपोल्ड हर्ट्ज़ '

क्या आईपी-एड्रेस काम करना बंद कर देगा? इसी प्रकार यदि आप उपयोग करते हैं ServerAlias?
लेओ लेपोल्ड हर्ट्ज़ o

1
आईपी ​​पते के माध्यम से पहुंच HTTP के लिए काम करते रहना चाहिए। BTW, हम टिप्पणी सीमा तक पहुँच गए हैं (इसलिए मैंने आपके प्रश्नों के मेरे पिछले उत्तर हटा दिए हैं) और मुझे जल्द ही ऑफ-लाइन जाना होगा।
एंथनी जी -

1
"राष्ट्रनाम होस्ट के रूप में जो भी भेजा जाता है, उसके साथ मेल खाना चाहिए: HTTP अनुरोध में हेडर" - गलत। होस्टनाम रखने से आम नाम IETF और CA / B दोनों मंचों द्वारा हटा दिया जाता है। सर्वर के नाम और आईपी पते हमेशा IETF और CA / B मंच के अधीन वैकल्पिक नाम में जाते हैं। यह भी देखें कि आप सर्टिफिकेट साइनिंग रिक्वेस्ट को अपने सर्टिफिकेशन अथॉरिटी के साथ कैसे साइन करते हैं और ओप्सनल के साथ सेल्फ अटेस्टेड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.