अमान्य स्व हस्ताक्षरित SSL प्रमाणपत्र - "विषय वैकल्पिक नाम गुम"


96

हाल ही में, Chrome ने मेरे स्व-हस्ताक्षरित SSL सेर्ट्स के साथ काम करना बंद कर दिया है, और सोचता है कि वे असुरक्षित हैं। जब मैं DevTools | Securityटैब में प्रमाण पत्र को देखता हूं, तो मैं देख सकता हूं कि यह कहता है

विषय वैकल्पिक नाम गुम इस साइट के लिए प्रमाणपत्र में एक डोमेन नाम या आईपी पते वाला विषय वैकल्पिक नाम एक्सटेंशन नहीं है।

प्रमाणपत्र त्रुटि साइट की प्रमाणपत्र श्रृंखला (नेट :: ERR_CERT_COMMON_NAME_INVALID) के साथ समस्याएँ हैं।

मैं इसे कैसे ठीक करूं?


33
यह एक प्रोग्रामिंग सवाल कैसे नहीं है ..... इसके बारे में सेल्फ साइनिंग सर्टिफिकेट जो आपके स्टैक बनाने का एक हिस्सा है। ,,, धन्यवाद ब्रैड
स्वीट चिली

1
CN=www.example.comशायद गलत है। Hostnames हमेशा SAN में चलते हैं । यदि CN में इसका वर्तमान है , तो यह SAN में भी मौजूद होना चाहिए (आपको इस मामले में इसे दो बार सूचीबद्ध करना होगा)। अधिक नियमों और कारणों के लिए, देखें कि आप अपने प्रमाणन प्राधिकरण के साथ प्रमाणपत्र साइनिंग अनुरोध पर हस्ताक्षर कैसे करते हैं और ओप्सनल के साथ स्व-हस्ताक्षरित प्रमाण पत्र कैसे बनाते हैं? आपको स्व-हस्ताक्षरित प्रमाण पत्र को उचित ट्रस्ट स्टोर में रखना होगा।
jww

@jww - यह उस प्रश्न का डुप्लिकेट नहीं है, जैसा कि आपको ओपनस्एल का उपयोग करके एक प्रमाण पत्र बनाने की आवश्यकता नहीं है, आप इसे अन्य उपकरणों के साथ बना सकते हैं।
ब्रैड पार्क

1
@BradParks - हम्म ... सवाल ओपनएसएसएल को टैग किया गया था और स्वीकृत जवाब ओपनएसएसएल का उपयोग करता है। मैंने फिर से ओपन किया और ओपनएसएसएल टैग को हटा दिया।
jww

जवाबों:


104

इसे ठीक करने के लिए, आपको opensslमूल रूप से प्रमाणपत्र बनाते समय एक अतिरिक्त पैरामीटर की आपूर्ति करने की आवश्यकता होती है , मूल रूप से

-sha256 -extfile v3.ext

जहाँ v3.extएक फ़ाइल है, जैसे %%DOMAIN%%कि आपके द्वारा उपयोग किए जाने वाले समान नाम के साथ बदल दी गई है Common Name। अधिक जानकारी यहाँ और यहाँ पर । ध्यान दें कि आम तौर पर आप उस डोमेन के लिए Common Nameऔर उस पर सेट करेंगे, जिसके %%DOMAIN%%लिए आप एक प्रमाण पत्र बनाने की कोशिश कर रहे हैं। तो अगर यह था www.mysupersite.com, तो आप दोनों के लिए उपयोग करेंगे।

v3.ext

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = %%DOMAIN%%

नोट: इस समस्या का समाधान करने वाली लिपियाँ, और क्रोम, सफारी और जावा क्लाइंट से उपयोग के लिए पूरी तरह से विश्वसनीय एसएसएल सेर्ट बनाते हैं, जो यहां देखे जा सकते हैं।

एक और नोट : यदि आप जो कुछ भी करने की कोशिश कर रहे हैं, वह स्वयं हस्ताक्षरित प्रमाण पत्र देखते समय त्रुटियों को फेंकने से क्रोम को रोकना है, तो आप क्रोम को एक विशेष कमांड लाइन विकल्प के साथ इसे शुरू करके सभी साइटों के लिए सभी एसएसएल त्रुटियों को अनदेखा करने के लिए कह सकते हैं, जैसा कि यहां विस्तृत है। सुपरयूजर पर


2
निश्चित नहीं है कि आप XAMPP के किस संस्करण का उपयोग कर रहे हैं, लेकिन यदि आप उस फ़ाइल में एक पंक्ति खोजते हैं जिसमें "Opensl x509" है, तो आपको फ़ाइल में उस पंक्ति के अंत में ऊपर जोड़ने में सक्षम होना चाहिए। उदाहरण के लिए, makecert.bat के इस संस्करण में , यह 9 लाइन पर है, और अंत में होगा bin\openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 365 -sha256 -extfile v3.ext:। बेशक आपको अभी भी v3.ext उसी फ़ोल्डर में एक फ़ाइल को सहेजने की आवश्यकता है ।
ब्रैड पार्क

1
मैंने सब कुछ आज़माने के बाद क्रोम छोड़ दिया और दूसरे ब्राउज़र के साथ जारी रखा। कुछ दिनों बाद, आज मैंने क्रोम के साथ जाँच की और यह काम करता है !!! शायद क्रोम में एक बग था और उन्होंने इसे ठीक कर दिया। विषय वैकल्पिक नाम गुम करने के लिए आपका तरीका काम करता है !!!! बस ब्राउज़र में विश्वसनीय रूट प्रमाणपत्र के तहत प्रमाणित जोड़ें।
तारिक

35
मैं हो रही है unknown option -extfile। मैं यह कैसे तय करुं?
निक मैनिंग

2
@NickManning - शायद आप extfileगलत ओपनसेल कमांड में निर्देश का उपयोग कर रहे हैं ? इसके बजाय इसका उपयोग किया जा रहा है openssl req -new ..., इसका उपयोग किया जाता है openssl x509 -req ...। कम से कम यह कि यहां किसी ने क्या कहा , जो इस उदाहरण
ब्रैड पार्क्स

2
"खुलने के लिए एक अतिरिक्त पैरामीटर की आपूर्ति" किस कमांड के लिए विशेष रूप से? एक से अधिक शामिल चरणों कर रहे हैं और क्या यह उत्तर बहुत अस्पष्ट है: ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/...
user145400

34

निम्नलिखित समाधान ने मेरे लिए क्रोम 65 ( रेफरी ) पर काम किया -

एक OpenSSL कॉन्फिग फ़ाइल बनाएँ (उदाहरण: req.cnf)

[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = US
ST = VA
L = SomeCity
O = MyCompany
OU = MyDivision
CN = www.company.com
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = www.company.com
DNS.2 = company.com
DNS.3 = company.net

इस कॉन्फ़िग फ़ाइल को संदर्भित करने वाला प्रमाणपत्र बनाएं

openssl req -x509 -nodes -days 730 -newkey rsa:2048 \
 -keyout cert.key -out cert.pem -config req.cnf -sha256

2
यह भी खूब रही! वास्तव में मुझे जो चाहिए था, और यह कंपनी के नाम और राज्य और जैसे सामान के लिए कष्टप्रद संकेतों को छोड़ देता है।
coredumperror

2
मैंने वहां कुछ वैकल्पिक समाधानों की कोशिश की लेकिन यह एकमात्र ऐसा है जिसने मेरे लिए काम किया। धन्यवाद!!
मिरको

1
आप विषय को कमांड-लाइन से खोल सकते हैं: Opensl req ... -subj "/C=US/ST=VA/L=SomeCity/O=MyCompany/CN=www.company.com"
जारोसा ज़ुराबा

आपने क्रोम में आयात कैसे किया? यहाँ basicConstraints = CA:trueगायब नहीं है ?
वुड्ज

19

बैश स्क्रिप्ट

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

पर परीक्षण किया गया Chrome 65.xऔर यह अभी भी काम कर रहा है। नए प्रमाणपत्र स्थापित करने के बाद क्रोम को पुनः आरंभ करना सुनिश्चित करें।

chrome://restart



अन्य संसाधन

एक और (बहुत अधिक मजबूत) टूल की जाँच करने लायक उपकरण है CloudFlare का cfsslटूलकिट:


2
आपको यहां स्क्रिप्ट जोड़नी चाहिए और उसे समझाना चाहिए।
jww

अच्छी स्क्रिप्ट लगती है। लेकिन एक स्क्रिप्ट ओपी की समस्या क्या है इसका वास्तविक जवाब नहीं देती है। शायद समझाएं कि उनका मुद्दा क्या है।
bshea

4

मैं बस -subjमशीनों के आईपी पते को जोड़ने वाले पैरामीटर का उपयोग करता हूं । तो केवल एक कमांड से हल किया।

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -sha256 -subj '/CN=my-domain.com/subjectAltName=DNS.1=192.168.0.222/' -keyout my-domain.key -out my-domain.crt

आप सी, एसटी, एल, ओ, ओयू, ईमेलएड्रेस जैसी अन्य विशेषताओं को जोड़ सकते हैं, ताकि बिना संकेत दिए जा सकें।


2
के लिए काम नहीं करता है। ऐसा लगता है कि क्रोम सैन को इस तरह से नहीं पहचानता है
मोनोकॉक

मुझे इस आदेश का उपयोग करके OpenSSL 1.1.0b पर "प्रमाणपत्र अनुरोध करने में समस्याएं" मिलीं।
रिक

मेरे लिए (विंडोज) थोड़ा अलग वाक्यविन्यास काम किया: openssl.exe req -x509 -sha256 -newkey rsa:2048 -keyout certificate.key -out certificate.crt -days 365 -nodes -subj "/CN=my.domain.com" -addext "subjectAltName=DNS:my.domain.com" IIS तो *.pfxप्रारूप की जरूरत है:openssl.exe pkcs12 -export -out certificate.pfx -inkey certificate.key -in certificate.crt
Havtánpán Havránek

3

मेरे पास मैक्रो / क्रोम पर काम करने वाले स्व-हस्ताक्षरित प्रमाणपत्र प्राप्त करने के लिए बहुत सारे मुद्दे थे। अंत में मुझे Mkcert मिला, "किसी भी नाम के साथ स्थानीय रूप से विश्वसनीय विकास प्रमाणपत्र बनाने के लिए एक सरल शून्य-कॉन्फिग टूल।" https://github.com/FiloSottile/mkcert


यह नए क्रोम में भी मेरे विंडोज 10 पर काम करता है। हालाँकि मुझे डिफ़ॉल्ट। \ System32 फ़ोल्डर से .pem फ़ाइलों को दूसरे में कॉपी करना था, क्योंकि Nginx इस फ़ोल्डर तक नहीं पहुँच सकता है।
वतावले

2
  • अपने होम निर्देशिका में अपने OpenSSL कॉन्फिग की प्रतिलिपि बनाएँ:

    cp /System/Library/OpenSSL/openssl.cnf ~/openssl-temp.cnf
    

    या लिनक्स पर:

    cp /etc/ssl/openssl.cnf ~/openssl-temp.cnf
    
  • इसके openssl-temp.cnfअंतर्गत विषय वैकल्पिक नाम जोड़ें [v3_ca]:

    [ v3_ca ]
    subjectAltName = DNS:localhost
    

    localhostउस डोमेन से प्रतिस्थापित करें जिसके लिए आप उस प्रमाणपत्र को जनरेट करना चाहते हैं।

  • प्रमाण पत्र बनाएं:

    sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
        -config ~/openssl-temp.cnf
        -keyout /path/to/your.key -out /path/to/your.crt
    

आप तब हटा सकते हैं openssl-temp.cnf


1

मैं v3.ext फ़ाइल के DNS.1 मान को बदलकर (शुद्ध :: ERR_CERT_AUTHORITY_INVALID) से छुटकारा पाने में सक्षम था

[alt_names] DNS.1 = domainname.com

अपने स्वयं के डोमेन के साथ domainname.com बदलें।


1

यहाँ IP सर्टिफिकेट बनाने का एक बहुत ही सरल तरीका है जिस पर क्रोम भरोसा करेगा।

Ssl.conf फ़ाइल ...

[ req ]
default_bits       = 4096
distinguished_name = req_distinguished_name
req_extensions     = req_ext
prompt             = no

[ req_distinguished_name ]
commonName                  = 192.168.1.10

[ req_ext ]
subjectAltName = IP:192.168.1.10

जहां, निश्चित रूप से 192.168.1.10 स्थानीय नेटवर्क आईपी है जिसे हम क्रोम पर भरोसा करना चाहते हैं।

प्रमाण पत्र बनाएँ:

openssl genrsa -out key1.pem
openssl req -new -key key1.pem -out csr1.pem -config ssl.conf
openssl x509 -req -days 9999 -in csr1.pem -signkey key1.pem -out cert1.pem -extensions req_ext -extfile ssl.conf
rm csr1.pem

Windows सभी क्लाइंट मशीनों पर विश्वसनीय रूट प्रमाणपत्र संग्रह में प्रमाण पत्र आयात करता है। Android फोन या टेबलेट पर इसे स्थापित करने के लिए प्रमाणपत्र डाउनलोड करें। अब क्रोम खिड़कियों और Android पर प्रमाण पत्र पर भरोसा करेंगे।

विंडोज़ देव बॉक्स पर खुलने का सबसे अच्छा स्थान है।


0

मैक पर क्रोम संस्करण 67.0.3396.99 से शुरू होने पर मेरे स्व-हस्ताक्षरित प्रमाण पत्र ने काम करना बंद कर दिया।

यहाँ जो कुछ भी लिखा गया था उससे उत्थान नहीं हुआ।

अपडेट करें

यह पुष्टि करने का मौका था कि मेरा दृष्टिकोण आज काम करता है :)। यदि यह आपके लिए काम नहीं करता है तो सुनिश्चित करें कि आप इस दृष्टिकोण का उपयोग कर रहे हैं

v3.ext
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = <specify-the-same-common-name-that-you-used-while-generating-csr-in-the-last-step>
$

यहां से कॉपी किया गया https://ksearch.wordpress.com/2017/08/22/generate-and-import-a-self-signed-ssl-certificate-on-mac-osx-sierra/

अंत अद्यतन

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

आशा है कि यह उस पर एक दिन की तरह खर्च किसी के लिए उपयोगी होगा।

क्रोम अपडेट न करें!


0

यदि आप अपना सर्वर लोकलहोस्ट चलाना चाहते हैं, तो आपको सेटअप CN = localhostऔर करने की आवश्यकता है DNS.1 = localhost

[req]
default_bits = 2048
default_md = sha256
distinguished_name = req_distinguished_name
prompt = no
prompt = no
x509_extensions = v3_req

[req_distinguished_name]
C = BR
CN = localhost
emailAddress=contact@example.com
L = Sao Paulo
O = example.com
OU = example.com
ST = Sao Paulo

[v3_req]
authorityKeyIdentifier = keyid, issuer
basicConstraints = CA:FALSE
extendedKeyUsage = serverAuth
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.