स्थानीयहोस्ट के लिए एक विश्वसनीय स्व-हस्ताक्षरित एसएसएल प्रमाणपत्र बनाएं (एक्सप्रेस / नोड के साथ उपयोग के लिए)


130

स्थानीयहोस्ट के साथ उपयोग के लिए स्व-हस्ताक्षरित प्रमाण पत्र बनाने पर विभिन्न निर्देशों का पालन करने की कोशिश करना, अधिकांश निर्देश IIS के लिए प्रतीत होते हैं, लेकिन मैं Nodejs / Express का उपयोग करने का प्रयास कर रहा हूं। उनमें से कोई भी ठीक से काम नहीं करता है क्योंकि जब प्रमाणपत्र स्थापित हो जाता है, तो उस पर भरोसा नहीं किया जाता है। यहाँ है कि मैंने कोशिश की है कि विफल रहता है:

क्या कोई ऐसा वर्कफ़्लो दे सकता है जो ऐसा कर सके? मुझे एक प्रमाणपत्र स्थापित हो सकता है, लेकिन मुझे क्रोम (v32) या IE (v10) पर भरोसा करने के लिए प्रमाण पत्र नहीं मिल सकता है।

संपादित करें: यह टिप्पणियों में सुझाव दिया गया था कि समस्या कोई विश्वसनीय प्रमाणित रूट नहीं है। मैं IE के माध्यम से प्रमाण पत्र स्थापित किया है, लेकिन यह अभी भी भरोसा नहीं किया जा रहा है।


स्वयं हस्ताक्षरित प्रमाणपत्रों में से कोई भी वेब ब्राउज़र के लिए विश्वसनीय नहीं बनाया जा सकता है। वे विश्वसनीय हस्ताक्षर करने वाले अधिकारियों द्वारा हस्ताक्षरित नहीं हैं।

1
यह सच नहीं है: आप अपने स्व-हस्ताक्षरित प्रमाणपत्र पर भरोसा करने के लिए एक रूट प्रमाणपत्र स्थापित कर सकते हैं। हालाँकि मैं ऐसा ठीक से नहीं कर सकता। मैंने पढ़ा है कि आप IE (क्रोम में नहीं) में प्रमाणित श्रृंखला स्थापित कर सकते हैं, इसलिए मैंने कोशिश की लेकिन यह अभी भी पहचाना नहीं जा रहा है। मुझे नहीं पता कि यह इसलिए है क्योंकि लोकलहोस्ट विशेष है या यदि स्व-हस्ताक्षरित प्रमाणपत्र सही नहीं है।
जेसन

3
मुझे क्रोम जैसे ब्राउज़र के साथ काम करने वाला स्व-हस्ताक्षरित प्रमाणपत्र कभी नहीं मिला। यहां मेरा वर्कअराउंड है: मैंने स्थानीय के लिए एक DNS प्रविष्टि बनाई। MYDOMAIN.com 127.0.0.1 (लोकलहोस्ट) की ओर इशारा करते हुए और फिर बस अपने उत्पादन प्रमाणपत्र का उपयोग करें। यह सुनिश्चित करने का अतिरिक्त लाभ है कि आपके उत्पादन प्रमाणपत्र श्रृंखला, आदि के साथ कोई समस्या नहीं है
जेसन जूल

जवाबों:


86

ऊपर दिए गए उत्तर आंशिक थे। मैंने इस काम को करने में बहुत समय लगाया है, यह पागल है। मेरे भविष्य के लिए ध्यान दें, यहाँ आपको वही करने की आवश्यकता है:

मैं क्रोम 65 के साथ विंडोज 10 पर काम कर रहा हूं। फ़ायरफ़ॉक्स अच्छी तरह से व्यवहार कर रहा है - बस एक सुरक्षा अपवाद के रूप में लोकलहोस्ट की पुष्टि करें और यह काम करेगा। क्रोम नहीं है:

स्टेप 1. अपने बैकेंड में, नामक एक फोल्डर बनाएं security। हम इसके अंदर काम करेंगे।

चरण 2।req.cnf निम्नलिखित सामग्री के साथ नाम अनुरोध फ़ाइल बनाएँ (क्रेडिट जाता है: @Anshul )

req.cnf:

[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = Country initials like US, RO, GE
ST = State
L = Location
O = Organization Name
OU = Organizational Unit 
CN = www.localhost.com
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = www.localhost.com
DNS.2 = localhost.com
DNS.3 = localhost

इस क्षेत्र की एक व्याख्या यहाँ है

चरण 3. टर्मिनल में सुरक्षा फ़ोल्डर में नेविगेट करें और निम्न कमांड टाइप करें:

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

चरण 4. फिर securityफ़ोल्डर के बाहर , अपने एक्सप्रेस ऐप में कुछ इस तरह से करें: (क्रेडिट @ डिएगो मेलो को जाता है)

backend 
 /security
 /server.js

server.js:

const express = require('express')
const app = express()
const https = require('https')
const fs = require('fs')
const port = 3000

app.get('/', (req, res) => {
    res.send("IT'S WORKING!")
})

const httpsOptions = {
    key: fs.readFileSync('./security/cert.key'),
    cert: fs.readFileSync('./security/cert.pem')
}
const server = https.createServer(httpsOptions, app)
    .listen(port, () => {
        console.log('server running at ' + port)
    })

चरण 5. सर्वर शुरू करें node server.js, और https: // localhost: 3000 पर जाएं

इस बिंदु पर हमारे पास सर्वर सेटअप है। लेकिन ब्राउज़र को चेतावनी संदेश दिखाना चाहिए।

हमें क्रोम / विंडोज़ सर्टिफिकेट स्टोर में, CA विश्वसनीय प्रमाणपत्र प्राधिकरण के रूप में, अपने स्व-हस्ताक्षरित प्रमाण पत्र को पंजीकृत करने की आवश्यकता है। (क्रोम इसे विंडोज़ में भी सेव करता है)

चरण 6. क्रोम में देव उपकरण खोलें, सुरक्षा पैनल पर जाएं, फिर देखें प्रमाण पत्र पर क्लिक करें। यहाँ छवि विवरण दर्ज करें

स्टेप 7. डिटेल्स पैनल में जाएं, कॉपी फाइल पर क्लिक करें, फिर जब सर्टिफिकेट एक्सपोर्ट विजार्ड दिखे, तो नीचे दिए गए नेक्स्ट पर क्लिक करें:

निर्यात विज़ार्ड पर विवरण - कॉपी फ़ाइल - पर जाएं

चरण 8. डीईआर एन्कोडिंग को छोड़ दें, अगले पर क्लिक करें, चुनें Browse, इसे डेस्कटॉप जैसे एक्सेस एक्सेस फ़ोल्डर में डाल दें और प्रमाण पत्र को नाम दें localhost.cer, then click Save and then Finish.। आपको डेस्कटॉप पर अपना प्रमाणपत्र देखने में सक्षम होना चाहिए।

स्टेप 9.chrome://settings/ url बॉक्स में डालकर ओपन करें । नीचे, नीचे क्लिक करें Advanced / Advanced Options, फिर खोजने के लिए नीचे स्क्रॉल करें Manage Certificates

प्रमाणपत्रों का प्रबंधन करें

चरण 10. विश्वसनीय रूट प्रमाणीकरण प्राधिकारी पैनल पर जाएं, और आयात पर क्लिक करें।

विश्वसनीय रूट प्रमाणीकरण प्राधिकारी पैनल पर जाएं, और आयात पर क्लिक करें

हम localhost.cerसर्टिफिकेट आयात करेंगे जो हमने अभी चरण 8 में निर्यात किया है।

चरण 11. क्लिक करें ब्राउज़ करें, ढूंढें localhost.cer, डिफ़ॉल्ट मान छोड़ें क्लिक करें अगली बार एक गुच्छा - जब तक यह चेतावनी प्रकट नहीं होती है, तब तक हाँ क्लिक करें।

सुरक्षा अपवाद की पुष्टि करें

चरण 12. सब कुछ बंद करें, और क्रोम को पुनरारंभ करें। फिर, जब https://localhost:3000आप को देखने जाना चाहिए: हरे रंग से प्यार होगा


नमस्ते, जब मैं अपने द्वारा खोले गए सभी चरणों को पूरा करता हूं https://localhost:3000और क्रोम लोडिंग पर अटक जाता है। कोई भी बता सकता है कि इसका क्या कारण हो सकता है?
co.zohar

@ co.zohar कंसोल में कोई संदेश? प्रेस crl+shift+iया F12कंसोल खोलने के लिए।
AION

1
यदि आप ऐसा नेटवर्क पर एक पते के लिए कर रहे हैं, तो मैंने पाया कि सर्टिफिकेट DNS को होस्टनाम पर सेट करना जैसे: DNS.1 = server.local फिर कनेक्टिंग मशीन पर होस्ट के लिए सर्वर आईपी पते को इंगित करने के लिए HOSTS फ़ाइल को अपडेट करें, उदाहरण के लिए: 192.168.0.50 server.localयह होगा प्रमाणपत्र और पते को प्रमाणपत्र से मेल खाने और मान्य करने की अनुमति दें।
रस्केलडेल

@ कोई कंसोल कुछ भी नहीं दिखाता है। पृष्ठ केवल दिखाता है: "स्थानीयता की प्रतीक्षा कर रहा है ..."। क्या आपने होस्ट फ़ाइल में कुछ भी कॉन्फ़िगर किया है?
co.zohar

1
मुझे अपने स्वयं के प्रश्न का अर्ध-उत्तर मिला: यदि आप उदाहरण के लिए "लोकल डॉट कॉम" जैसी सीएन और डीएनएस 1 को बदलते हैं, और प्रत्येक कंप्यूटर में जिसे सर्वर तक पहुंच की आवश्यकता होती है, स्थानीय को इंगित करने के लिए आदि / होस्ट फ़ाइल को बदलते हैं। .com सर्वर के आईपी के लिए, यह काम करता है।
TKoL

111

सबसे छोटा रास्ता। MacOS पर परीक्षण किया गया, लेकिन अन्य OS पर इसी तरह काम कर सकता है।

पीम पैदा करें

> openssl req -x509 -newkey rsa:2048 -keyout keytmp.pem -out cert.pem -days 365

> openssl rsa -in keytmp.pem -out key.pem

आपका एक्सप्रेस सर्वर

const express = require('express')
const app = express()
const https = require('https')
const fs = require('fs')
const port = 3000

app.get('/', (req, res) => {
  res.send('WORKING!')
})

const httpsOptions = {
  key: fs.readFileSync('./key.pem'),
  cert: fs.readFileSync('./cert.pem')
}
const server = https.createServer(httpsOptions, app).listen(port, () => {
  console.log('server running at ' + port)
})
  • https://localhost:3000Google Chrome में खोलें और आप देखेंगे कि यह सुरक्षित नहीं है। अभी तक!
  • डेवलपर टूल> सुरक्षा> प्रमाणपत्र देखें: छवि को अपने डेस्कटॉप पर खींचें और उसे डबल क्लिक करें।
  • 'जोड़ें' पर क्लिक करें
  • किचेन एक्सेस में इसे खोजें और इसे डबल क्लिक करें
  • 'ट्रस्ट' का विस्तार करें और 'इस प्रमाणपत्र का उपयोग करते समय' को 'हमेशा विश्वास' में बदलें
  • आपको प्रमाणित करने के लिए प्रेरित किया जा सकता है।
  • अपने सर्वर को पुनरारंभ करें।
  • अपने ब्राउज़र को ताज़ा करें।
  • का आनंद लें! :)

1
यदि आप इसे मैक पर करना चाहते हैं तो एक और लिंक यहां दिया गया है: certsimple.com/blog/localhost-ssl-fix
जॉन

सुंदर! यह काम किया! मैं इसके अलावा करना चाहता हूँ: यहाँ से OpenSSL स्थापित करें: indy.fulgan.com/SSL/?C=M=O=A । .Cnf फ़ाइल को यहाँ से प्राप्त करें: और फिर, इसे यहाँ से कॉन्फ़िगर करें: gist.githubusercontent.com/pandurang90/dbe6a67339747ef5bacf/raw/…/ और openSSL को यहाँ से कॉन्फ़िगर करें: stackoverflow.com/questions/7360602/…
जोस A

2
मैं चाहता हूं कि Chrome 58+ के लिए, आप "विषय वैकल्पिक नाम गायब" त्रुटि प्राप्त करने जा रहे हैं। stackoverflow.com/a/42917227/1057052 । अधिक मदद के लिए नीचे दिए गए उत्तरों की जाँच करें: stackoverflow.com/a/43666288/1057052 , stackoverflow.com/a/44398368/1057052
जोस एक

14
Drag image to your desktop and double click it-> मैं अपने डेस्कटॉप पर कुछ भी नहीं खींच सकता, घसीटने योग्य नहीं है .. क्या imageआप अयस्क के बारे में बात कर रहे हैं?
एयॉन नोव

7
Chrome में "विषय वैकल्पिक नाम गायब" पर काबू पाने के लिए, आप अपने द्वारा openssl req -newkey rsa:2048 -x509 -nodes -keyout keytmp.pem -new -out cert.pem -subj /CN=localhost -reqexts SAN -extensions SAN -config <(cat /System/Library/OpenSSL/openssl.cnf <(printf '[SAN]\nsubjectAltName=DNS:localhost')) -sha256 -days 3650सुझाई गई पहली पंक्ति के बजाय कर सकते हैं । और यह भी इस प्रक्रिया में कम सवाल पूछेंगे ...
माइकल लिट्विन

78

प्रमाण पत्र बनाने के लिए आप ओपनएसएसएल की कोशिश कर सकते हैं। इस पर एक नजर ।

आपको JS एक्सप्रेस सर्वर को नोड में HTTPS जोड़ने के लिए .key और .crt फ़ाइल की आवश्यकता है। जब आप इसे जनरेट कर लेते हैं, तो इस कोड का उपयोग सर्वर में HTTPS जोड़ने के लिए करें।

var https = require('https');
var fs = require('fs');
var express = require('express');

var options = {
    key: fs.readFileSync('/etc/apache2/ssl/server.key'),
    cert: fs.readFileSync('/etc/apache2/ssl/server.crt'),
    requestCert: false,
    rejectUnauthorized: false
};


var app = express();

var server = https.createServer(options, app).listen(3000, function(){
    console.log("server started at port 3000");
});

यह मेरी स्थानीय मशीन के साथ-साथ सर्वर में ठीक काम कर रहा है जहां मैंने इसे तैनात किया है। मेरे पास जो भी सर्वर है, उसे goDaddy से खरीदा गया था, लेकिन लोकलहोस्ट के पास एक स्व-हस्ताक्षरित प्रमाणपत्र था।

हालाँकि, हर ब्राउज़र ने यह कहते हुए एक त्रुटि की कि कनेक्शन विश्वसनीय नहीं है, क्या आप जारी रखना चाहते हैं। जारी रखने के बाद, मैंने ठीक काम किया।

यदि किसी ने कभी भी स्व हस्ताक्षरित प्रमाण पत्र के साथ इस त्रुटि को दरकिनार किया है, तो कृपया सूचित करें।


9
आपके प्रमाणपत्र पर अभी भी भरोसा नहीं किया गया है, इसलिए आपको वही समस्या है जिसका मैं वर्णन कर रहा हूं। मुझे इसकी आवश्यकता है कि एक webservice को ठीक से परीक्षण / डिबग करने के लिए विश्वसनीय होना चाहिए।
जेसन

1
तो क्या आप चाहते हैं कि यह प्रमाणपत्र केवल आपकी स्थानीय मशीन पर ही निर्भर हो और नेटवर्क में न हो?

1
उत्तर के शीर्ष पर स्थित लिंक 1024 बिट 3DES एन्क्रिप्शन का पुन: संयोजन करता है, जो पुराना है। बेहतर openssl genrsa -out key.pem 2048कुंजी के लिए उपयोग करने के लिए बेहतर है।
वाष्पीकृत

3
आपके प्रमाणपत्र पर अभी भी भरोसा नहीं किया गया है।
डिएगो मेलो

2
एक्सप्रेस कोड ऊपर काम करता है, स्थानीय CA / विश्वसनीय प्रमाणपत्र बनाने के लिए github.com/FiloSottile/mkcert (ओपनएसएसएल के बजाय) का उपयोग करता है । हर तरफ हरे रंग की सलाखें।
सोम

11

स्थानीयहोस्ट के लिए एसएसएल प्रमाणपत्र कैसे उत्पन्न करें: लिंक

openssl genrsa -des3 -out server.key 1024

आपको यहां एक पासवर्ड दर्ज करने की आवश्यकता है जिसे आपको निम्नलिखित चरणों में फिर से लिखना होगा

openssl req -new -key server.key -out server.csr

जब "सामान्य नाम" टाइप पूछा जाता है: लोकलहोस्ट

openssl x509 -req -days 1024 -in server.csr -signkey server.key -out server.crt

1
यह वह समाधान है जो पिछले 2 घंटों से इंटरनेट पर बिखरा हुआ है। उबंटू में किसी के लिए भी cp server.crt /usr/local/share/ca-certificates/.और sudo update-ca-certificatesफिर चलाओ स्थानीय NHJS 8+ के तहत स्थानीय https अनुरोध काम करता है। आईडी भी बढ़ती है1024 to 2048
साल्यंगोज

6

यहाँ मेरे लिए क्या काम कर रहा है

खिड़कियों पर

1) इसे अपने% WINDIR% \ System32 \ driver \ etc \ मेजबान फ़ाइल में जोड़ें: 127.0.0.1 localdev.YOURSITE.net (कारण ब्राउज़र में 'localhost' के साथ समस्याएँ हैं (क्रॉस मूल स्क्रिप्टिंग के लिए)

विंडोज विस्टा और विंडोज 7 विस्टा और विंडोज 7 यूजर अकाउंट कंट्रोल (यूएसी) का उपयोग करते हैं इसलिए नोटपैड को प्रशासक के रूप में चलाया जाना चाहिए।

  1. Start -> All Programs -> Accessories पर क्लिक करें

  2. नोटपैड पर राइट क्लिक करें और Run as एडमिनिस्ट्रेटर चुनें

  3. "विंडोज को आपकी अनुमति की आवश्यकता है" UAC विंडो पर जारी रखें पर क्लिक करें।

  4. नोटपैड खुलने पर क्लिक करें फ़ाइल -> खोलें

  5. फ़ाइल नाम फ़ील्ड प्रकार C: \ Windows \ System32 \ ड्राइवर्स \ etc \ Host में

  6. Open पर क्लिक करें

  7. इसे अपने% WINDIR% \ System32 \ driver \ etc \ मेजबान फ़ाइल में जोड़ें: 127.0.0.1 localdev.YOURSITE.net

  8. सहेजें

  9. ब्राउज़र बंद करें और पुनः आरंभ करें

मैक या लिनक्स पर:

  1. के साथ खुला / आदि / मेजबानों suअनुमति के
  2. जोड़ना 127.0.0.1 localdev.YOURSITE.net
  3. बचाओ

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

कुकी बनाने के दौरान ".YOURSITE.net" को कुकीडोमैन (शुरुआत में डॉट के साथ) के रूप में उपयोग करें, फिर इसे सभी सबडोमेन के साथ काम करना चाहिए।

2) उस स्थानीयदेव का उपयोग करके प्रमाण पत्र बनाएं

TIP: यदि आपके पास विंडोज़ पर सर्टिफिकेट बनाने के मुद्दे हैं, तो इसके बजाय एक VirtualBox या Vmware मशीन का उपयोग करें।

3) http://www.charlesproxy.com/documentation/using-charles/ssl-certports/ पर उल्लिखित प्रमाण पत्र आयात करें


हाय ट्रॉय, इसे साझा करने के लिए धन्यवाद। यह काम करता है या नहीं, इस पर किसी और को टिप्पणी करनी होगी। मेरा वर्कअराउंड: मैंने अपने होस्ट्स फ़ाइल में dev.phantomjscloud.com को जोड़ना और फिर अपने प्रोडक्शन सर्टिफिकेट का उपयोग करना समाप्त कर दिया। यह केवल तभी उपयोगी है जब आप अपनी उत्पादन कुंजी अपने देव बॉक्स पर उपलब्ध चाहते हैं, लेकिन मुझे लगता है कि आपका समाधान अभी भी मान्य हो सकता है, अगर कोई और कृपया सत्यापित कर सकता है
जेसन

यह मेरे और मेरी टीम के लिए काम करता है, तरीकों के संयोजन में, स्थानीय से स्थानीय सर्वर को सुरक्षित करने के लिए उत्पादन सर्वर के लिए स्थानीय।
ट्रॉयवर्क्स

विंडोज के लिए, git bash कंसोल यहां से ओपनसेल कमांड का उपयोग करके बहुत अच्छा काम करता है । बस रूट प्रमाणपत्र स्थापित करना होगा और यदि आप चाहें तो इसके द्वारा हस्ताक्षरित कई साइट-विशिष्ट प्रमाणपत्र बना सकते हैं।
जेसन गोएमाट

6

@FiloSottile से Mkcert इस प्रक्रिया को असीम रूप से सरल बनाता है:

  1. Mkcert स्थापित करें , macOS / Windows / Linux के लिए निर्देश हैं
  2. mkcert -install एक स्थानीय सीए बनाने के लिए
  3. mkcert localhost 127.0.0.1 ::1 वर्तमान निर्देशिका में लोकलहोस्ट के लिए एक विश्वसनीय प्रमाणपत्र बनाने के लिए
  4. आप नोड का उपयोग कर रहे हैं (जो सिस्टम रूट स्टोर का उपयोग नहीं करता है), इसलिए आपको CA को पर्यावरण चर में स्पष्ट रूप से निर्दिष्ट करने की आवश्यकता है , जैसे:export NODE_EXTRA_CA_CERTS="$(mkcert -CAROOT)/rootCA.pem"
  5. अंत में अपना एक्सप्रेस सर्वर विभिन्न अन्य उत्तरों में वर्णित सेटअप का उपयोग करके चलाएं (जैसे नीचे)
  6. तेज़ी से। लोकलहोस्ट की तैराकी हरी में।

मूल नोड सेटअप:

const https = require('https');
const fs = require('fs');
const express = require('express');

const app = express();    
const server = https.createServer({
    key: fs.readFileSync('/XXX/localhost+2-key.pem'), // where's me key?
    cert: fs.readFileSync('/XXX/localhost+2.pem'), // where's me cert?
    requestCert: false,
    rejectUnauthorized: false,
}, app).listen(10443); // get creative

बहुत काम करता है! इस दृष्टिकोण के साथ हमें अपने स्व-हस्ताक्षरित प्रमाण पत्र को पंजीकृत करने की आवश्यकता नहीं है, क्योंकि क्रोम / विंडोज़ सर्टिफिकेट स्टोर में CA विश्वसनीय प्रमाणपत्र प्राधिकरण है। जैसा कि अन्य उत्तरों में बताया गया है।
ज़हीर

4

यदि आप OSX / Chrome पर हैं, तो आप यहाँ वर्णित के रूप में स्व-हस्ताक्षरित एसएसएल प्रमाणपत्र को अपने सिस्टम किचेन में जोड़ सकते हैं: http://www.robpeck.com/2010/10/google-chrome-mac-os-x-and -Self-साइन्ड-ssl-प्रमाण पत्र

यह एक मैनुअल प्रक्रिया है, लेकिन मुझे यह आखिरकार काम कर गया। बस यह सुनिश्चित करें कि कॉमन नेम (CN) "लोकलहोस्ट" (पोर्ट के बिना) पर सेट है और सर्टिफिकेट जोड़े जाने के बाद सुनिश्चित करें कि सर्टिफिकेट पर सभी ट्रस्ट विकल्प "ऑलवेज ट्रस्ट" पर सेट हैं। यह भी सुनिश्चित करें कि आप इसे "सिस्टम" किचेन में जोड़ते हैं न कि "लॉगिन" किचेन में।


वह IE का उल्लेख करता है, जिसका अर्थ है कि वह विंडोज का उपयोग कर रहा है।
2-बिट्स

3

यदि आप नोड का उपयोग कर रहे हैं, तो उन्हें नोड के साथ क्यों नहीं बनाया जाए? इस मॉड्यूल को पूर्ण रूप से चित्रित किया गया लगता है:

ध्यान दें कि मैं मक्खी पर उत्पन्न नहीं होगा। कुछ प्रकार की निर्माण स्क्रिप्ट के साथ उत्पन्न करें ताकि आपके पास एक सुसंगत प्रमाणपत्र और कुंजी हो। अन्यथा आपको हर बार नव-निर्मित स्व-हस्ताक्षरित प्रमाण पत्र को अधिकृत करना होगा।


3

पोस्ट किए गए कुछ उत्तरों में कुछ टुकड़े हैं जो इस समस्या को दूर करने के लिए मेरे लिए बहुत उपयोगी थे। हालांकि, मुझे न्यूनतम में भी दिलचस्पी थी चरणों और आदर्श रूप से, ओपनएसएसएल (विंडोज 10 पर) से परहेज कर ।

तो, जवाब से एक महत्वपूर्ण टुकड़ा (क्रेडिट: @ ट्रॉयवर्क्स) ) यह है कि आपको एक काल्पनिक सर्वर बनाने के लिए अपनी फाइल को संपादित करने की आवश्यकता है, और जो कि 127.0.0.1 पर मैप करता है। यह मानता है कि आप स्थानीय विकास करने जा रहे हैं।

मेरे मामले में, मैं NodeJS में एक वेबसोकेट को सुरक्षित करने के लिए एसएस प्रमाण पत्र का उपयोग कर रहा था, और उस सॉकेट को प्रोग्रामेटिक रूप से जोड़ा जा रहा था (जैसा कि ब्राउज़र के माध्यम से विरोध किया गया था)। इसलिए मेरे लिए, यह महत्वपूर्ण था कि प्रमाण पत्र को चेतावनी या त्रुटियों के बिना स्वीकार किया जाए, और एक महत्वपूर्ण सीएन के साथ प्रमाण पत्र प्राप्त करने के लिए महत्वपूर्ण टुकड़ा था (और निश्चित रूप से विश्वसनीय अधिकारियों में प्रमाण पत्र स्वीकार करें, जैसा कि उत्तर में कहीं और वर्णित है) । एक स्व-हस्ताक्षरित प्रमाण पत्र बनाने के लिए IIS का उपयोग करना उचित CN नहीं बनाएगा, इसलिए मैंने Powershell का उपयोग करते हुए निम्नलिखित सरल कमांड की खोज की :

New-SelfSignedCertificate -DnsName "gandalf.dummy.dev" -FriendlyName "gandalf" -CertStoreLocation "cert:\LocalMachine\My"

यह पीएस एडमिन कंसोल में चलाया जाना है, लेकिन यह बस काम करता है, और सर्टिफिकेट को लोकलमैचिन सर्टिफिकेट स्टोर के "पर्सनल" सेक्शन में डाल देता है। आप इसे सत्यापित कर सकते हैं कि इसे निष्पादित करके बनाया गया है:

ls cert:\LocalMachine\My 

इस पर भरोसा करने के लिए, बस इसे कॉपी करें और प्रमाणपत्र प्रबंधक का उपयोग करके "विश्वसनीय रूट प्रमाणन प्राधिकरण" में पेस्ट करें (यह सुनिश्चित करें कि आप स्थानीय मशीन प्रमाणपत्र देख रहे हैं, वर्तमान उपयोगकर्ता नहीं!)।

यदि आप IIS में इस प्रमाणपत्र से जुड़ते हैं, तो आपको https://gandalf.dummy.dev/ पर हिट करने में सक्षम होना चाहिए और बिना किसी चेतावनी के एक सुरक्षित कनेक्शन प्राप्त करना चाहिए ।

NodeJS में इसका उपयोग करते हुए अंतिम टुकड़ा, ऊपर और अन्य SO उत्तरों में वर्णित है, इसलिए मैं केवल विंडोज पर इसे जोड़ूंगा, यह एक pfx फ़ाइल के साथ काम करना आसान है जो प्रमाणित और निजी कुंजी को जोड़ती है। आप प्रमाणपत्र प्रबंधक से आसानी से एक pfx निर्यात कर सकते हैं, लेकिन यह प्रभावित करता है कि आप इसे NodeJS में कैसे उपयोग करते हैं। 'Https' मॉड्यूल का उपयोग करते हुए एक सर्वर को इंस्टेंट करते समय, आपके द्वारा उपयोग किए जाने वाले विकल्प ('कुंजी' और 'प्रमाणपत्र' के बजाय) 'pfx' और 'passphrase' होंगे, जैसे:

var https = require('https');
var options = { 
    pfx: fs.readFileSync('mypfxfile'), 
    passphrase: 'foo' 
};
var server = https.createServer(options);

2

खिड़कियों पर मैंने एमएमसी (स्टार्ट> रन> एमएमसी) का उपयोग करके आईआईएस विकास प्रमाणपत्र पर भरोसा किया, फिर "स्थानीय कंप्यूटर" को चुनने और चूक को स्वीकार करने के लिए प्रमाणपत्र स्नैपइन जोड़ें। व्यक्तिगत रूप से देखने के लिए स्थानीय कंप्यूटर प्रमाणपत्र पेड़ का विस्तार करने के बाद उस सर्टिफिकेट को जोड़ दिया जाता है, लोकलहोस्ट प्रमाणपत्र का चयन करें, राइट क्लिक> सभी कार्य> निर्यात। निर्यात विज़ार्ड में सभी चूक स्वीकार करें।

एक बार जब वह फ़ाइल सहेज ली जाती है, तो विश्वसनीय प्रमाणपत्रों का विस्तार करें और आपके द्वारा निर्यात किए गए प्रमाणपत्र को आयात करना शुरू करें। https://localhostअब क्रोम पर भरोसा किया गया है जिसमें कोई सुरक्षा चेतावनी नहीं है।

मैंने MSDN ब्लॉग से इस गाइड रिज़ॉल्यूशन # 2 का उपयोग किया था , इस ऑप ने अपने प्रश्न में एक लिंक भी साझा किया था कि इसे MMC का उपयोग करना चाहिए लेकिन यह मेरे लिए काम करता है। संकल्प # 2


2

के लिए जाओ: chrome://flags/

सक्षम करें: स्थानीयहोस्ट से लोड किए गए संसाधनों के लिए अमान्य प्रमाणपत्र की अनुमति दें।

आपके पास हरी सुरक्षा नहीं है, लेकिन आपको क्रोम में https: // localhost के लिए हमेशा अनुमति है ।


2

इसके और भी पहलू हैं।

आप एक प्रमाण पत्र, स्व-हस्ताक्षरित या नहीं के साथ टीएलएस (कुछ SSL रखने के लिए) प्राप्त कर सकते हैं।

स्व-हस्ताक्षरित प्रमाणपत्र के लिए एक हरे रंग की पट्टी रखने के लिए, आपको प्रमाणपत्र प्राधिकरण (सीए) भी बनना होगा। यह पहलू मुझे अपने स्थानीय विकास सेटअप में हरी पट्टी को प्राप्त करने के लिए अपनी यात्रा पर पाए गए अधिकांश संसाधनों में गायब है। CA बनना एक सर्टिफिकेट बनाने जितना आसान है।

यह संसाधन CA प्रमाणपत्र और सर्वर प्रमाणपत्र दोनों के निर्माण को कवर करता है और परिणामस्वरूप स्थानीयहोस्ट क्रोम, फ़ायरफ़ॉक्स और एज पर एक हरे रंग की पट्टी दिखाने में मेरी स्थापना हुई: https://ram.k0a1a.net/self-signed_https_cert_after_chrome_58

कृपया ध्यान दें: क्रोम में आपको अपने विश्वसनीय अधिकारियों के लिए CA प्रमाणपत्र जोड़ना होगा।


0

यदि आपको @ alon के विस्तृत चरणों की तुलना में एक कदम आगे जाने की आवश्यकता है और स्वयं हस्ताक्षरित ca भी बनाएं:

https.createServer({
  key: fs.readFileSync(NODE_SSL_KEY),
  cert: fs.readFileSync(NODE_SSL_CERT),
  ca: fs.readFileSync(NODE_SSL_CA),
}, app).listen(PORT, () => {});

package.json

"setup:https": "openssl genrsa -out src/server/ssl/localhost.key 2048
&& openssl req -new -x509 -key src/server/ssl/localhost.key -out src/server/ssl/localhost.crt -config src/server/ssl/localhost.cnf
&& openssl req -new -out src/server/ssl/localhost.csr -config src/server/ssl/localhost.cnf
&& openssl x509 -req -in src/server/ssl/localhost.csr -CA src/server/ssl/localhost.crt -CAkey src/server/ssl/localhost.key -CAcreateserial -out src/server/ssl/ca.crt",

वर्णित के रूप में localhost.cnf का उपयोग करना :

[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = UK
ST = State
L = Location
O = Organization Name
OU = Organizational Unit 
CN = www.localhost.com
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = www.localhost.com
DNS.2 = localhost.com
DNS.3 = localhost
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.