यह ट्यूटोरियल आपको दिखाता है कि OpenSSL का उपयोग करके Heroku के लिए CSR (Certificate Signing Request) कैसे बनाएं और Heroku CLI के साथ जारी किए गए सर्टिफिकेट को कैसे अपलोड करें।
Heroku के पास खुद प्लेटफॉर्म पर कोई बिल्ट-इन CSR फॉर्म नहीं है, इसलिए रिक्वेस्ट और उससे मेल खाने वाली प्राइवेट की को प्लेटफॉर्म से बाहर बनाया जाता है (आपकी लोकल Linux, macOS, या Windows मशीन पर, या OpenSSL उपलब्ध वाले किसी भी शेल में)। एक बार जब Certificate Authority सर्टिफिकेट जारी कर देती है, तो आप इसे इंटरमीडिएट चेन के साथ जोड़ते हैं और heroku certs:add के जरिए अपलोड करते हैं।
क्या आपको वाकई Heroku पर CSR की जरूरत है?
ज्यादातर Heroku ऐप्स के लिए, जवाब है नहीं। Heroku की Automated Certificate Management (ACM) ऐप के हर कस्टम डोमेन के लिए एक मुफ्त Let’s Encrypt सर्टिफिकेट प्रोविजन और ऑटो-रिन्यू करती है, बिना किसी CSR को जनरेट किए और बिना किसी रिन्यूअल कैलेंडर को बनाए रखे। ACM Eco, Basic, Standard, और Performance dynos पर उपलब्ध है। यदि ACM आपके उपयोग के मामले में फिट बैठता है, तो इसे एक ही CLI कमांड से सक्षम करें:
heroku certs:auto:enable -a your-app-name
CSR जनरेट करें और सेल्फ-मैनेज्ड (थर्ड-पार्टी) सर्टिफिकेट का उपयोग तभी करें जब निम्नलिखित में से कोई एक लागू हो:
- आपको एक वाइल्डकार्ड सर्टिफिकेट चाहिए। ACM प्रति कस्टम डोमेन केवल सिंगल-नेम Let’s Encrypt सर्टिफिकेट जारी करता है, *.example.com नहीं।
- आपको OV या EV वैलिडेशन चाहिए। ACM केवल DV है।
- आपकी पॉलिसी या कॉन्ट्रैक्ट के अनुसार Let’s Encrypt के अलावा किसी विशिष्ट Certificate Authority की आवश्यकता है।
- आपके पास पहले से ही एक वैध सर्टिफिकेट है और आप इसे बिना दोबारा जारी किए Heroku पर फिर से डिप्लॉय करना चाहते हैं।
- आपको एक मल्टी-डोमेन (SAN) सर्टिफिकेट चाहिए जो उन होस्टनेम को कवर करता हो जो सभी इस Heroku ऐप पर नहीं हैं।
यदि उपरोक्त में से कोई भी सच नहीं है, तो CSR के काम को छोड़ दें और ACM का उपयोग करें। इंस्टॉल फ्लो के लिए, हमारी गाइड देखें Heroku पर SSL सर्टिफिकेट कैसे इंस्टॉल करें।
CSR जनरेट करने से पहले जानने योग्य Heroku SSL की बुनियादी बातें
कुछ प्लेटफॉर्म सीमाएं तय करती हैं कि CSR और की कैसी दिखनी चाहिए:
- SNI डिफ़ॉल्ट है। हर नया ऐप Heroku SSL का उपयोग करता है, जो Server Name Indication पर निर्भर करता है, इसलिए एक ही Heroku एंडपॉइंट अपने खुद के सर्टिफिकेट के साथ कई HTTPS होस्टनेम को सर्व कर सकता है। लीगेसी SSL Endpoint ऐड-ऑन को 2021 में डेप्रिकेट कर दिया गया था (नई प्रोविजनिंग 14 मई, 2021 को रुक गई; प्रोडक्ट 18 अक्टूबर, 2021 को end of life पर पहुंच गया) और यह नए ऐप्स पर उपलब्ध नहीं है।
- केवल RSA की। Heroku का SSL स्टैक RSA प्राइवेट की (2048 बिट या उससे बड़ी) स्वीकार करता है। मैनुअल सर्टिफिकेट अपलोड के लिए ECDSA की सपोर्ट नहीं की जाती हैं, इसलिए CSR को -newkey rsa:2048 के साथ जनरेट करें (या rsa:3072 / rsa:4096 यदि आपकी पॉलिसी में बड़ी की की जरूरत है)।
- Fullchain PEM आवश्यक है। Heroku एक सिंगल PEM फाइल की उम्मीद करता है जिसमें पहले end-entity सर्टिफिकेट हो और उसके बाद इंटरमीडिएट CA बंडल जोड़ा गया हो। केवल लीफ सर्टिफिकेट अपलोड के दौरान अस्वीकार कर दिया जाएगा।
- अनएन्क्रिप्टेड प्राइवेट की। सर्टिफिकेट के साथ अपलोड की गई की को पासफ्रेज-प्रोटेक्टेड नहीं होना चाहिए। नीचे दिया गया OpenSSL कमांड की को क्लियर PEM में लिखने के लिए -nodes का उपयोग करता है।
- कस्टम डोमेन की पूर्वापेक्षा। Heroku तब तक कोई सर्टिफिकेट (ACM या मैनुअल) बाइंड नहीं करेगा जब तक कि कस्टम डोमेन को
heroku domains:addके जरिए ऐप के साथ रजिस्टर नहीं किया जाता और इसे प्रति-डोमेन *.herokudns.com DNS टारगेट की ओर पॉइंट नहीं किया जाता।
OpenSSL के साथ Heroku के लिए CSR जनरेट करें
यदि आप पहले ही अपना CSR जनरेट कर चुके हैं और अपनी Certificate Authority से साइन किया गया सर्टिफिकेट प्राप्त कर चुके हैं, तो Heroku पर सर्टिफिकेट अपलोड करें पर आगे बढ़ें। Heroku डिप्लॉयमेंट के लिए CSR बनाने के आपके पास दो तरीके हैं:
- SSL Dragon CSR Generator का उपयोग करें: यह आपके ब्राउज़र में एक छोटे फॉर्म से CSR और उससे मेल खाने वाली RSA प्राइवेट की दोनों को तैयार करता है, फिर आप अपने SSL ऑर्डर के दौरान CSR को पेस्ट करते हैं।
- खुद OpenSSL से CSR जनरेट करें, या तो अपनी लोकल मशीन पर या किसी भी शेल में जहां OpenSSL इंस्टॉल है। नीचे दिए गए स्टेप्स इस तरीके को कवर करते हैं।
स्टेप 1: OpenSSL के साथ एक शेल खोलें
OpenSSL हर हाल के Linux डिस्ट्रीब्यूशन और macOS पर पहले से आता है। Windows पर, इसे इंस्टॉल करें (हमारी गाइड देखें Windows पर OpenSSL इंस्टॉल करना) और PowerShell या Command Prompt में कमांड चलाएं। किसी भी ऐसे फ़ोल्डर में टर्मिनल खोलें जिसमें आप लिख सकते हैं: OpenSSL वहां CSR और की फाइलों को प्लेन टेक्स्ट के रूप में बनाएगा, इसलिए काम पूरा होने पर आप उन्हें मशीन से हटा सकते हैं।
स्टेप 2: OpenSSL कमांड चलाएं
अपने शेल में निम्नलिखित कमांड चलाएं। yourdomain को अपने वास्तविक डोमेन से बदलें (उदाहरण के लिए, example.com):
openssl req -new -newkey rsa:2048 -nodes
-keyout yourdomain.key -out yourdomain.csr
-addext "subjectAltName = DNS:yourdomain.com,DNS:www.yourdomain.com"
प्रत्येक फ्लैग क्या करता है:
- -new एक नया CSR बनाता है।
- -newkey rsa:2048 CSR के साथ एक नई 2048-बिट RSA प्राइवेट की जनरेट करता है। यदि आपकी पॉलिसी में बड़ी की की आवश्यकता है तो rsa:3072 या rsa:4096 का उपयोग करें। ECDSA में स्विच न करें: Heroku मैनुअल अपलोड पर ECC की को अस्वीकार करता है।
- -nodes की को बिना पासफ्रेज के लिखता है (OpenSSL 3.x पर बराबर फ्लैग -noenc है; दोनों काम करते हैं)। Heroku
heroku certs:addके दौरान एन्क्रिप्टेड प्राइवेट की को अस्वीकार कर देगा। - -keyout और -out की और CSR के लिए आउटपुट पाथ हैं।
- -addext “subjectAltName=DNS:…” Subject Alternative Names (SANs) को सीधे एम्बेड करता है (इसके लिए OpenSSL 1.1.1 या उसके बाद के वर्जन की आवश्यकता है)। हर आधुनिक ब्राउज़र और CA को SAN एक्सटेंशन की आवश्यकता होती है, यहां तक कि सिंगल-डोमेन सर्टिफिकेट के लिए भी, इसलिए apex (yourdomain.com) और किसी भी www वेरिएंट को शामिल करें जिसे आप Heroku पर सर्व करने की योजना बना रहे हैं। वाइल्डकार्ड के लिए, *.yourdomain.com को भी सूचीबद्ध करें।
स्टेप 3: CSR डिटेल्स भरें
OpenSSL आपसे सर्टिफिकेट की पहचान से जुड़े फील्ड्स भरने के लिए कहता है। उन्हें निम्नानुसार दर्ज करें:
- Country Name: उस देश का दो-अक्षर वाला ISO कोड जहां आपका संगठन कानूनी रूप से रजिस्टर्ड है (उदाहरण के लिए, US)।
- State or Province Name: राज्य या क्षेत्र का पूरा नाम (उदाहरण के लिए, Nevada)। संक्षिप्त न करें।
- Locality Name: शहर (उदाहरण के लिए, Las Vegas)।
- Organization Name: आपके संगठन का कानूनी नाम। एक Domain Validation सर्टिफिकेट के लिए यह फील्ड वैलिडेट नहीं की जाती और इसे छोड़ा जा सकता है, लेकिन बस Enter न दबाएं: OpenSSL तब कॉन्फ़िगरेशन में परिभाषित डिफ़ॉल्ट भर देता है, और स्टॉक कॉन्फ़िग Internet Widgits Pty Ltd के साथ आता है, जो आपके CSR में शामिल हो जाएगा। इसे वास्तव में खाली छोड़ने के लिए एक सिंगल पीरियड (
.) टाइप करें। - Organizational Unit Name: CA/Browser Forum द्वारा डेप्रिकेट किया गया, इसलिए इसे खाली छोड़ दें।
- Common Name: वह fully qualified domain name (FQDN) जिसे आप सुरक्षित करना चाहते हैं, उदाहरण के लिए www.yourdomain.com। वाइल्डकार्ड के लिए, *.yourdomain.com दर्ज करें। Common Name SAN सूची में भी मौजूद होना चाहिए।
- Email Address: एक वैध संपर्क ईमेल (या खाली छोड़ें)।
- A challenge password और An optional company name: दोनों को खाली छोड़ दें। स्किप करने के लिए Enter दबाएं।
OpenSSL वर्तमान डायरेक्टरी में दो फाइलें लिखता है:
- yourdomain.csr: वह CSR जिसे आप अपनी Certificate Authority को सबमिट करते हैं।
- yourdomain.key: प्राइवेट की। इस फाइल को निजी रखें और इसका बैकअप लें; जब आप जारी किए गए सर्टिफिकेट को Heroku पर अपलोड करेंगे तो आपको इसकी फिर से आवश्यकता होगी।
स्टेप 4: CSR को अपनी Certificate Authority को सबमिट करें
yourdomain.csr को किसी भी टेक्स्ट एडिटर में खोलें और पूरे ब्लॉक को कॉपी करें, जिसमें -----BEGIN CERTIFICATE REQUEST----- और -----END CERTIFICATE REQUEST----- मार्कर शामिल हों। इसे अपने SSL ऑर्डर के दौरान CSR फील्ड में पेस्ट करें।
सबमिट करने से पहले, आप हमारे CSR Decoder से CSR की सामग्री सत्यापित कर सकते हैं: यह Common Name, SAN सूची, की का प्रकार, और की की लंबाई दिखाता है ताकि आप CA से पहले ही टाइपो पकड़ सकें।
CA द्वारा मांगे गए वैलिडेशन स्टेप्स (DNS, फाइल-आधारित, या ईमेल) पूरे करें। एक बार सर्टिफिकेट जारी हो जाने पर, CA आपको साइन किया गया end-entity सर्टिफिकेट (आमतौर पर एक .crt फाइल) और इंटरमीडिएट CA बंडल (अक्सर एक .ca-bundle फाइल) भेजता है। नीचे दिए गए अपलोड के साथ आगे बढ़ें।
सर्टिफिकेट को Heroku पर अपलोड करें
स्टेप 1: अपने कस्टम डोमेन को ऐप के साथ रजिस्टर करें
जब तक कस्टम डोमेन ऐप के साथ रजिस्टर नहीं किया जाता, Heroku कोई सर्टिफिकेट बाइंड नहीं करेगा। Heroku CLI में लॉग इन किए गए टर्मिनल से, चलाएं:
heroku domains:add www.example.com -a your-app-name
www.example.com को अपने डोमेन से और your-app-name को अपने Heroku ऐप से बदलें। किसी भी अतिरिक्त होस्टनेम के लिए कमांड दोहराएं (उदाहरण के लिए एक बेयर रूट डोमेन या दूसरा सबडोमेन)। कमांड एक प्रति-डोमेन DNS टारगेट लौटाता है जैसे quiet-fire-1234.herokudns.com: आप इस मान की ओर स्टेप 4 में अपने DNS प्रोवाइडर को पॉइंट करेंगे।
स्टेप 2: फुलचेन PEM फाइल बनाएं
Heroku एक सिंगल PEM फाइल की उम्मीद करता है जिसमें पहले end-entity सर्टिफिकेट हो और उसके बाद इंटरमीडिएट चेन हो। Linux या macOS पर, फाइलों को cat के साथ जोड़ें:
cat yourdomain.crt yourdomain.ca-bundle > server.crt
Windows पर, दोनों फाइलों को एक प्लेन टेक्स्ट एडिटर (Notepad++ या VS Code, Word नहीं) में खोलें और .ca-bundle की सामग्री को .crt की सामग्री के नीचे, उसी क्रम में, ब्लॉक के बीच बिना कोई खाली लाइन के पेस्ट करें। संयुक्त फाइल को server.crt के रूप में सेव करें। यदि आपके CA ने पहले से ही चेन को एक सिंगल PEM के अंदर भेजा है (लीफ को ऊपर रखते हुए), तो आप उस फाइल का ज्यों का त्यों उपयोग कर सकते हैं।
स्टेप 3: Heroku CLI के साथ सर्टिफिकेट अपलोड करें
एक बिल्कुल नई इंस्टॉल के लिए, फुलचेन PEM और उससे मेल खाने वाली प्राइवेट की को certs:add के साथ अपलोड करें:
heroku certs:add server.crt yourdomain.key -a your-app-name
यदि आप उसी ऐप पर मौजूदा सर्टिफिकेट को बदल रहे हैं (उदाहरण के लिए रिन्यूअल के दौरान), तो इसके बजाय certs:update का उपयोग करें ताकि Heroku वही DNS टारगेट बनाए रखे:
heroku certs:update server.crt yourdomain.key -a your-app-name
डैशबोर्ड पसंद करते हैं? ऐप खोलें, Settings > Domains and certificates पर जाएं, Configure SSL पर क्लिक करें, Manually चुनें, संयुक्त server.crt को सर्टिफिकेट स्लॉट में और .key फाइल को प्राइवेट-की स्लॉट में ड्रैग करें, फिर Next पर क्लिक करें और पुष्टि करें।
यदि अपलोड करते समय आपको Internal server error दिखाई देता है, तो आपकी मशीन पर Heroku CLI लगभग हमेशा पुराना होता है। heroku update चलाएं और फिर से कोशिश करें। यदि एरर बनी रहती है, तो पुष्टि करें कि सर्टिफिकेट फाइल PEM फॉर्मेट में एक फुलचेन है (पहले end-entity, बाद में इंटरमीडिएट्स) और प्राइवेट की वही RSA की है जो आपके द्वारा सबमिट किए गए CSR से मेल खाती है।
स्टेप 4: DNS को Heroku DNS टारगेट की ओर पॉइंट करें
अपने डोमेन सूचीबद्ध करें और Heroku द्वारा हर एक के लिए लौटाए गए DNS टारगेट को कॉपी करें:
heroku domains -a your-app-name
अपने DNS प्रोवाइडर पर, प्रति डोमेन एक रिकॉर्ड बनाएं:
- सबडोमेन (उदाहरण के लिए www.example.com): Heroku DNS टारगेट की ओर पॉइंट करने वाला एक CNAME रिकॉर्ड बनाएं।
- Apex / रूट डोमेन (उदाहरण के लिए example.com): DNS स्पेक के अनुसार apex पर CNAME की अनुमति नहीं है, इसलिए उसी Heroku DNS टारगेट की ओर पॉइंट करने वाला ALIAS, ANAME, या फ्लैटेंड-CNAME रिकॉर्ड (सटीक नाम आपके DNS प्रोवाइडर पर निर्भर करता है) का उपयोग करें। यदि आपका DNS प्रोवाइडर इनमें से किसी को भी सपोर्ट नहीं करता है, तो DNS को ऐसे प्रोवाइडर पर ले जाएं जो इसे सपोर्ट करता हो (Cloudflare, DNSimple, Route 53, NS1, easyDNS, और इसी तरह के अन्य)।
DNS को your-app-name.herokuapp.com की ओर या किसी भी *.herokussl.com होस्टनेम की ओर पॉइंट न करें: मैनुअल बाइंडिंग इनमें से किसी के जरिए भी सही तरीके से रूट नहीं होगी। हमेशा वही प्रति-डोमेन DNS टारगेट उपयोग करें जो Heroku ने असाइन किया है।
CSR और डिप्लॉय किए गए सर्टिफिकेट को सत्यापित करें
CSR सबमिट करने से पहले, Common Name, SAN सूची, की का प्रकार, और की की लंबाई की पुष्टि करने के लिए इसे लोकल रूप से डिकोड करें:
openssl req -in yourdomain.csr -noout -text
या अपने ब्राउज़र में समान जानकारी के लिए CSR को हमारे CSR Decoder में पेस्ट करें।
अपलोड करने के बाद, पुष्टि करें कि सर्टिफिकेट इंस्टॉल है और ट्रैफिक सर्व कर रहा है। CLI से:
heroku certs:info -a your-app-name
आउटपुट सर्टिफिकेट, जारी करने वाली CA, समाप्ति तिथि, और यह जिन डोमेनों को कवर करता है उन्हें सूचीबद्ध करता है। फिर अपनी साइट को ब्राउज़र में https:// के जरिए खोलें, जांचें कि पैडलॉक मौजूद है, और यह पुष्टि करने के लिए हमारे SSL Checker से एक गहन बाहरी स्कैन चलाएं कि सर्टिफिकेट चेन पूरी है और प्रोटोकॉल सही तरीके से कॉन्फ़िगर किए गए हैं।
आज ऑर्डर करते समय एसएसएल प्रमाणपत्रों पर 10% की बचत करें!
तेजी से जारी करना, मजबूत एन्क्रिप्शन, 99.99% ब्राउज़र ट्रस्ट, समर्पित समर्थन और 25 दिन की मनी-बैक गारंटी। कूपन कोड: SAVE10


