Cum sa faci HTTPS sa lucreze la mediul tau de

Aproape orice site web pe care îl vizitați astăzi este protejat de HTTPS. Dacă a ta nu este încă, ar trebui să fie. Securizarea serverului dvs. cu HTTPS înseamnă, de asemenea, că nu puteți trimite cereri către acest server de la unul care nu este protejat de HTTPS. Acest lucru pune o problemă dezvoltatorilor care utilizează un mediu de dezvoltare local, deoarece toți rulează http://localhost afara din cutie.

La pornirea din care fac parte, am decis să ne securizăm punctele finale AWS Elastic Load Balancer cu HTTPS ca parte a unei mișcări de îmbunătățire a securității. Am întâlnit o situație în care solicitările mediului meu de dezvoltare locală către server au început să fie respinse.

O căutare rapidă pe Google mai târziu, am găsit mai multe articole de genul acest, acest sau Aceasta cu instrucțiuni detaliate despre cum aș putea implementa HTTPS pe localhost. Niciuna dintre aceste instrucțiuni nu părea să funcționeze chiar și după ce le-am urmat religios. Chrome a aruncat întotdeauna un NET::ERR_CERT_COMMON_NAME_INVALID eroare la mine.

1611910687 432 Cum sa faci HTTPS sa lucreze la mediul tau de

Problema

Toate instrucțiunile detaliate pe care le găsisem erau corecte pentru timpul în care au fost scrise. Nu mai.

După o grămadă de Google, am descoperit că motivul pentru care certificatul meu local a fost respins a fost acela Chrome a fost învechit de suport pentru potrivirea commonName din certificate, de fapt, necesită un subjectAltName din ianuarie 2017.

Soluția

Vom folosi OpenSSL pentru a genera toate certificatele noastre.

Pasul 1: Root certificat SSL

Primul pas este crearea unui certificat Root Secure Sockets Layer (SSL). Acest certificat rădăcină poate fi apoi utilizat pentru a semna orice număr de certificate pe care le-ați putea genera pentru domenii individuale. Dacă nu sunteți familiarizați cu ecosistemul SSL, aceasta articol din DNSimple face o treabă bună de a introduce certificate Root SSL.

Generați o cheie RSA-2048 și salvați-o într-un fișier rootCA.key. Acest fișier va fi folosit ca cheie pentru generarea certificatului SSL Root. Vi se va solicita o frază de acces pe care va trebui să o introduceți de fiecare dată când utilizați această cheie specială pentru a genera un certificat.

openssl genrsa -des3 -out rootCA.key 2048

Puteți utiliza cheia pe care ați generat-o pentru a crea un nou certificat SSL Root. Salvați-l într-un fișier numitrootCA.pem. Acest certificat va avea o valabilitate de 1.024 de zile. Simțiți-vă liber să o schimbați în orice număr de zile doriți. De asemenea, vi se va solicita alte informații opționale.

openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
1611910687 746 Cum sa faci HTTPS sa lucreze la mediul tau de

Pasul 2: Încredere în certificatul SSL rădăcină

Înainte de a putea utiliza certificatul Root SSL nou creat pentru a începe emiterea certificatelor de domeniu, mai este încă un pas. Trebuie să îi spuneți Mac-ului dvs. să aibă încredere în certificatul dvs. rădăcină, astfel încât toate certificatele individuale emise de acesta să fie, de asemenea, de încredere.

Deschideți Keychain Access pe Mac și accesați categoria Certificate din brelocul System. Odată ajuns acolo, importați fișierul rootCA.pem folosind Fișier> Importați articole. Faceți dublu clic pe certificatul importat și modificați meniul derulant „Când utilizați acest certificat:” to Always Trîn secțiunea Trust.

Certificatul dvs. ar trebui să arate cam așa în interiorul Keychain Access dacă ați urmat corect instrucțiunile până acum.

1611910687 548 Cum sa faci HTTPS sa lucreze la mediul tau de

Pasul 2: Certificat SSL de domeniu

Certificatul SSL rădăcină poate fi utilizat acum pentru a emite un certificat special pentru mediul dvs. local de dezvoltare aflat la localhost.

Creați un nou fișier de configurare OpenSSL server.csr.cnf astfel încât să puteți importa aceste setări atunci când creați un certificat în loc să le introduceți pe linia de comandă.

[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn

[dn]
C=US
ST=RandomState
L=RandomCity
O=RandomOrganization
OU=RandomOrganizationUnit
emailAddress=hello@example.com
CN = localhost

Creeaza o v3.ext fișier pentru a crea un fișier Certificat X509 v3. Observați cum specificăm subjectAltName aici.

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

[alt_names]
DNS.1 = localhost

Creați o cheie de certificat pentru localhost folosind setările de configurare stocate în server.csr.cnf. Această cheie este stocată în server.key.

openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config <( cat server.csr.cnf )

O cerere de semnare a certificatului este emisă prin certificatul SSL rădăcină pe care l-am creat anterior pentru a crea un certificat de domeniu pentru localhost. Ieșirea este un fișier certificat numit server.crt.

openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 500 -sha256 -extfile v3.ext
1611910687 124 Cum sa faci HTTPS sa lucreze la mediul tau de

Folosiți noul dvs. certificat SSL

Acum sunteți gata să vă asigurați localhost cu HTTPS. Mută server.key și server.crt fișierele într-o locație accesibilă pe serverul dvs. și includeți-le la pornirea serverului.

Într-o aplicație Express scrisă în Node.js, iată cum ați face-o. Asigurați-vă că faceți acest lucru numai pentru mediul dvs. local. Nu utilizați acest lucru în producție.

1611910687 692 Cum sa faci HTTPS sa lucreze la mediul tau de

Sper că ți s-a părut util acest tutorial. Dacă nu vă simțiți confortabil cu rularea comenzilor date de dvs., am creat un set de scripturi utile pe care le puteți rula rapid pentru a genera certificatele pentru dvs. Mai multe detalii găsiți pe Repo GitHub.

Îmi place să ajut colegi dezvoltatori de web. Urmează-mă pe mine Stare de nervozitate și anunțați-mă dacă aveți sugestii sau feedback. Dacă doriți să vă arătați aprecierea față de oricare dintre lucrările pe care le-am făcut, fie că este o postare pe blog, un proiect open source sau doar un tweet amuzant, puteți cumpără-mi o ceașcă de cafea.