Acest tutorial vă arată cum să generați un CSR (Certificate Signing Request) pentru Heroku folosind OpenSSL și cum să încărcați certificatul emis cu Heroku CLI.
Heroku nu are un formular CSR integrat pe platformă, așa că cererea și cheia privată corespunzătoare sunt generate în afara platformei (pe mașina dvs. locală Linux, macOS sau Windows, sau în orice shell unde este disponibil OpenSSL). Odată ce Autoritatea de Certificare emite certificatul, îl combinați cu lanțul intermediar și îl încărcați prin heroku certs:add.
Aveți nevoie cu adevărat de un CSR pe Heroku?
Pentru majoritatea aplicațiilor Heroku, răspunsul este nu. Automated Certificate Management (ACM) de la Heroku provizionează și reînnoiește automat un certificat gratuit Let’s Encrypt pentru fiecare domeniu personalizat de pe aplicație, fără a fi nevoie să generați un CSR sau să urmăriți un calendar de reînnoire. ACM este disponibil pe dynos Eco, Basic, Standard și Performance. Dacă ACM se potrivește cazului dvs. de utilizare, activați-l cu o singură comandă CLI:
heroku certs:auto:enable -a your-app-name
Generați un CSR și utilizați un certificat auto-gestionat (de la terți) doar atunci când se aplică una dintre următoarele situații:
- Aveți nevoie de un certificat wildcard. ACM emite doar certificate Let’s Encrypt cu un singur nume per domeniu personalizat, nu **.example.com**.
- Aveți nevoie de validare OV sau EV. ACM este doar DV.
- Politica sau contractul dvs. impune o Autoritate de Certificare specifică, alta decât Let’s Encrypt.
- Dețineți deja un certificat valid și doriți să-l redistribuiți pe Heroku fără a-l reemite.
- Aveți nevoie de un certificat multi-domeniu (SAN) care acoperă nume de gazdă care nu se află toate pe această aplicație Heroku.
Dacă niciuna dintre situațiile de mai sus nu se aplică, treceți peste procesul CSR și folosiți ACM. Pentru fluxul de instalare propriu-zis, consultați ghidul nostru despre cum să instalați un certificat SSL pe Heroku.
Elemente de bază Heroku SSL pe care trebuie să le cunoașteți înainte de a genera CSR-ul
Câteva constrângeri ale platformei determină modul în care trebuie să arate CSR-ul și cheia:
- SNI este implicit. Fiecare aplicație nouă folosește Heroku SSL, care se bazează pe Server Name Indication, astfel încât un singur endpoint Heroku poate deservi mai multe nume de gazdă HTTPS cu propriile certificate. Add-on-ul vechi SSL Endpoint a fost depreciat în 2021 (provizionarea de noi certificate s-a oprit pe 14 mai 2021; produsul a atins sfârșitul ciclului de viață pe 18 octombrie 2021) și nu este disponibil pentru aplicații noi.
- Doar chei RSA. Stack-ul SSL al Heroku acceptă chei private RSA (2048 biți sau mai mari). Cheile ECDSA nu sunt acceptate pentru încărcările manuale de certificate, așa că generați CSR-ul cu -newkey rsa:2048 (sau rsa:3072 / rsa:4096 dacă politica dvs. impune o cheie mai mare).
- Este necesar un fișier PEM cu lanțul complet. Heroku așteaptă un singur fișier PEM cu certificatul end-entity mai întâi și pachetul CA intermediar concatenat după acesta. Un certificat doar de tip leaf va fi respins la încărcare.
- Cheie privată necriptată. Cheia încărcată împreună cu certificatul nu poate fi protejată cu parolă. Comanda OpenSSL de mai jos folosește -nodes pentru a scrie cheia în format PEM necriptat.
- Cerință prealabilă privind domeniul personalizat. Heroku nu va asocia niciun certificat (ACM sau manual) până când domeniul personalizat nu este înregistrat pentru aplicație prin
heroku domains:addși direcționat către ținta DNS *.herokudns.com specifică domeniului.
Generați CSR-ul pentru Heroku cu OpenSSL
Dacă ați generat deja CSR-ul și ați primit certificatul semnat de la Autoritatea dvs. de Certificare, treceți direct la Încărcarea certificatului pe Heroku. Aveți două moduri de a crea un CSR pentru o implementare Heroku:
- Utilizați Generatorul de CSR de la SSL Dragon: acesta produce atât CSR-ul, cât și cheia privată RSA corespunzătoare în browser, pornind de la un formular scurt, apoi lipiți CSR-ul în timpul comenzii dvs. de SSL.
- Generați CSR-ul singur cu OpenSSL, fie pe mașina dvs. locală, fie în orice shell unde este instalat OpenSSL. Pașii de mai jos acoperă această variantă.
Pasul 1: Deschideți un shell cu OpenSSL
OpenSSL este preinstalat pe orice distribuție Linux recentă și pe macOS. Pe Windows, instalați-l (consultați ghidul nostru despre instalarea OpenSSL pe Windows) și rulați comanda în PowerShell sau Command Prompt. Deschideți un terminal în orice folder în care aveți drept de scriere: OpenSSL va crea acolo fișierele CSR și cheie sub formă de text simplu, astfel încât să le puteți muta de pe mașină după ce ați terminat.
Pasul 2: Rulați comanda OpenSSL
Rulați următoarea comandă în shell-ul dvs. Înlocuiți yourdomain cu domeniul dvs. real (de exemplu, example.com):
openssl req -new -newkey rsa:2048 -nodes
-keyout yourdomain.key -out yourdomain.csr
-addext "subjectAltName = DNS:yourdomain.com,DNS:www.yourdomain.com"
Ce face fiecare opțiune:
- -new creează un nou CSR.
- -newkey rsa:2048 generează o nouă cheie privată RSA de 2048 biți alături de CSR. Folosiți rsa:3072 sau rsa:4096 dacă politica dvs. impune o cheie mai mare. Nu treceți la ECDSA: Heroku respinge cheile ECC la încărcările manuale.
- -nodes scrie cheia fără parolă (pe OpenSSL 3.x opțiunea echivalentă este -noenc; ambele funcționează). Heroku va respinge o cheie privată criptată în timpul
heroku certs:add. - -keyout și -out reprezintă căile de ieșire pentru cheie și CSR.
- -addext „subjectAltName=DNS:…” încorporează direct Subject Alternative Names (SAN-uri) (necesită OpenSSL 1.1.1 sau o versiune ulterioară). Fiecare browser modern și CA impune extensia SAN, chiar și pentru certificate cu un singur domeniu, așa că includeți atât domeniul de bază (yourdomain.com), cât și orice variantă www pe care intenționați să o serviți pe Heroku. Pentru un wildcard, listați și *.yourdomain.com.
Pasul 3: Completați detaliile CSR-ului
OpenSSL vă solicită câmpurile de identitate ale certificatului. Introduceți-le după cum urmează:
- Country Name: codul ISO din două litere al țării în care este înregistrată legal organizația dvs. (de exemplu, US).
- State or Province Name: numele complet al statului sau regiunii (de exemplu, Nevada). Nu abreviați.
- Locality Name: orașul (de exemplu, Las Vegas).
- Organization Name: denumirea legală a organizației dvs. Pentru un certificat Domain Validation, câmpul nu este validat și poate fi lăsat necompletat, dar nu apăsați pur și simplu Enter: OpenSSL va completa în acest caz orice valoare implicită definită în configurația sa, iar configurația standard include Internet Widgits Pty Ltd, care ar ajunge în CSR-ul dvs. Introduceți un singur punct (
.) pentru a-l lăsa cu adevărat gol. - Organizational Unit Name: depreciat de CA/Browser Forum, așa că lăsați-l necompletat.
- Common Name: numele de domeniu complet calificat (FQDN) pe care doriți să-l securizați, de exemplu www.yourdomain.com. Pentru un wildcard, introduceți *.yourdomain.com. Common Name trebuie să fie prezent și în lista SAN.
- Email Address: o adresă de e-mail de contact validă (sau lăsați necompletat).
- A challenge password și An optional company name: lăsați ambele necompletate. Apăsați Enter pentru a trece peste ele.
OpenSSL scrie două fișiere în directorul curent:
- yourdomain.csr: CSR-ul pe care îl trimiteți Autorității dvs. de Certificare.
- yourdomain.key: cheia privată. Păstrați acest fișier confidențial și faceți o copie de rezervă; veți avea nevoie din nou de el atunci când încărcați certificatul emis pe Heroku.
Pasul 4: Trimiteți CSR-ul Autorității dvs. de Certificare
Deschideți yourdomain.csr în orice editor de text și copiați întregul bloc, inclusiv marcajele -----BEGIN CERTIFICATE REQUEST----- și -----END CERTIFICATE REQUEST-----. Lipiți-l în câmpul CSR în timpul comenzii dvs. de SSL.
Înainte de a trimite, puteți verifica conținutul CSR-ului cu Decodorul nostru de CSR: acesta afișează Common Name, lista SAN, tipul de cheie și lungimea cheii, astfel încât să puteți depista greșelile de tipar înainte ca CA-ul să o facă.
Finalizați pașii de validare solicitați de CA (DNS, bazat pe fișier sau prin e-mail). Odată ce certificatul este emis, CA-ul vă trimite certificatul end-entity semnat (de obicei un fișier .crt) și pachetul CA intermediar (adesea un fișier .ca-bundle). Continuați cu încărcarea de mai jos.
Încărcați certificatul pe Heroku
Pasul 1: Înregistrați domeniul personalizat la aplicație
Heroku nu va asocia un certificat până când domeniul personalizat nu este înregistrat la aplicație. Dintr-un terminal autentificat în Heroku CLI, rulați:
heroku domains:add www.example.com -a your-app-name
Înlocuiți www.example.com cu domeniul dvs. și your-app-name cu numele aplicației dvs. Heroku. Repetați comanda pentru orice alte nume de gazdă suplimentare (de exemplu, un domeniu rădăcină simplu sau un al doilea subdomeniu). Comanda returnează o țintă DNS specifică domeniului, precum quiet-fire-1234.herokudns.com: veți direcționa furnizorul dvs. de DNS către această valoare la Pasul 4.
Pasul 2: Construiți fișierul PEM cu lanțul complet
Heroku așteaptă un singur fișier PEM cu certificatul end-entity mai întâi și lanțul intermediar după acesta. Pe Linux sau macOS, concatenați fișierele cu cat:
cat yourdomain.crt yourdomain.ca-bundle > server.crt
Pe Windows, deschideți ambele fișiere într-un editor de text simplu (Notepad++ sau VS Code, nu Word) și lipiți conținutul fișierului .ca-bundle sub conținutul fișierului .crt, în această ordine, fără linie goală între blocuri. Salvați fișierul combinat sub numele server.crt. Dacă CA-ul dvs. v-a trimis deja lanțul într-un singur PEM (cu certificatul leaf la început), puteți folosi acel fișier ca atare.
Pasul 3: Încărcați certificatul cu Heroku CLI
Pentru o instalare complet nouă, încărcați fișierul PEM cu lanțul complet și cheia privată corespunzătoare cu certs:add:
heroku certs:add server.crt yourdomain.key -a your-app-name
Dacă înlocuiți un certificat existent pe aceeași aplicație (de exemplu, în timpul reînnoirii), folosiți în schimb certs:update, astfel încât Heroku să păstreze aceeași țintă DNS:
heroku certs:update server.crt yourdomain.key -a your-app-name
Preferați panoul de control? Deschideți aplicația, mergeți la Settings > Domains and certificates, faceți clic pe Configure SSL, alegeți Manually, trageți fișierul combinat server.crt în locul destinat certificatului și fișierul .key în locul destinat cheii private, apoi faceți clic pe Next și confirmați.
Dacă vedeți o eroare Internal server error la încărcare, aproape întotdeauna versiunea Heroku CLI de pe mașina dvs. este învechită. Rulați heroku update și încercați din nou. Dacă eroarea persistă, confirmați că fișierul certificat este un lanț complet în format PEM (end-entity mai întâi, intermediarii după) și că cheia privată este cheia RSA corespunzătoare CSR-ului trimis.
Pasul 4: Direcționați DNS-ul către ținta DNS Heroku
Listați domeniile dvs. și copiați ținta DNS returnată de Heroku pentru fiecare:
heroku domains -a your-app-name
La furnizorul dvs. de DNS, creați câte o înregistrare pentru fiecare domeniu:
- Subdomeniu (de exemplu www.example.com): creați o înregistrare CNAME care indică spre ținta DNS Heroku.
- Domeniu apex / rădăcină (de exemplu example.com): un CNAME nu este permis pe domeniul apex conform specificației DNS, așa că folosiți o înregistrare ALIAS, ANAME sau CNAME aplatizat (numele exact depinde de furnizorul dvs. de DNS) care indică spre aceeași țintă DNS Heroku. Dacă furnizorul dvs. de DNS nu acceptă niciuna dintre acestea, mutați DNS-ul la unul care le acceptă (Cloudflare, DNSimple, Route 53, NS1, easyDNS și altele similare).
Nu direcționați DNS-ul către your-app-name.herokuapp.com sau către orice nume de gazdă *.herokussl.com: asocierea manuală nu se va direcționa corect prin niciunul dintre acestea. Folosiți întotdeauna ținta DNS specifică domeniului atribuită de Heroku.
Verificați CSR-ul și certificatul implementat
Înainte de a trimite CSR-ul, decodați-l local pentru a confirma Common Name, lista SAN, tipul de cheie și lungimea cheii:
openssl req -in yourdomain.csr -noout -text
Sau lipiți CSR-ul în Decodorul nostru de CSR pentru aceleași informații direct în browser.
După încărcare, confirmați că certificatul este instalat și că servește traficul. Din CLI:
heroku certs:info -a your-app-name
Rezultatul afișează certificatul, CA-ul emitent, data de expirare și domeniile pe care le acoperă. Apoi deschideți site-ul dvs. prin https:// într-un browser, verificați dacă lacătul este prezent și rulați o scanare externă mai detaliată cu SSL Checker pentru a confirma că lanțul de certificate este complet și că protocoalele sunt configurate corect.
Economisește 10% la certificatele SSL în momentul plasării comenzii!
Eliberare rapidă, criptare puternică, încredere în browser de 99,99%, suport dedicat și garanție de returnare a banilor în 25 de zile. Codul cuponului: SAVE10


