Kako natjerati HTTPS da radi na vašem lokalnom razvojnom okruženju za 5 minuta

Gotovo sve web stranice koje danas posjetite zaštićene su HTTPS-om. Ako tvoj još nije, trebao bi biti. Osiguranje vašeg poslužitelja HTTPS-om također znači da ovom poslužitelju ne možete slati zahtjeve s onog koji nije zaštićen HTTPS-om. To predstavlja problem programerima koji koriste lokalno razvojno okruženje jer svi oni rade //localhostizvan mreže.

Prilikom pokretanja čiji sam dio odlučili smo osigurati svoje krajnje točke AWS Elastic Load Balancer s HTTPS-om kao dio poteza za poboljšanje sigurnosti. Naišao sam na situaciju da su zahtjevi mog lokalnog razvojnog okruženja poslužitelju počeli odbijati.

Brzom Google pretragom kasnije, pronašao sam nekoliko ovakvih članaka, ovog ili ovog s detaljnim uputama o tome kako mogu primijeniti HTTPS localhost. Činilo se da nijedna od ovih uputa nije uspjela čak i nakon što sam ih vjerno slijedio. Chrome mi je uvijek dobacivao NET::ERR_CERT_COMMON_NAME_INVALIDpogrešku.

Problem

Sve detaljne upute koje sam pronašao bile su točne u vrijeme dok su napisane. Ne više.

Nakon tona guglanja, otkrio sam da je razlog odbijanja mog lokalnog certifikata taj što je Chrome prestao podržavati podudaranje commonName u certifikatima, što zapravo zahtijeva subjectAltName od siječnja 2017.

Rješenje

Koristit ćemo OpenSSL za generiranje svih naših certifikata.

Korak 1: Root SSL certifikat

Prvi korak je stvaranje certifikata Root Secure Sockets Layer (SSL). Ovaj korijenski certifikat tada se može koristiti za potpisivanje bilo kojeg broja certifikata koje biste mogli generirati za pojedine domene. Ako niste upoznati sa SSL ekosustavom, ovaj članak iz DNSimple-a čini dobar posao uvođenja korijenskih SSL certifikata.

Generirajte RSA-2048 ključ i spremite ga u datoteku rootCA.key. Ova će se datoteka koristiti kao ključ za generiranje korijenskog SSL certifikata. Od vas će se zatražiti da unesete frazu za ulazak koju ćete trebati unijeti svaki put kada koristite ovaj ključ za generiranje certifikata.

openssl genrsa -des3 -out rootCA.key 2048

Ključ koji ste generirali možete koristiti za stvaranje novog Root SSL certifikata. Spremite ga u datoteku s imenom rootCA.pem. Ova će potvrda vrijediti 1.024 dana. Slobodno ga promijenite u bilo koji broj dana koji želite. Od vas će se zatražiti i druge neobavezne informacije.

openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem

Korak 2: Vjerujte korijenskom SSL certifikatu

Prije nego što možete upotrijebiti novostvoreni korijenski SSL certifikat za započinjanje izdavanja certifikata domene, još je jedan korak. Morate reći svom Macu da vjeruje vašem korijenskom certifikatu, tako da se vjeruju i svi pojedinačni certifikati koje je izdao.

Otvorite Keychain Access na vašem Macu i idite na kategoriju Certifikati u vašem System keychain. Jednom tamo uvezite rootCA.pemdatoteku pomoću Datoteka> Uvezi stavke. Dvaput kliknite uvezeni certifikat i promijenite padajući izbornik "Kad koristite ovaj certifikat:" na Uvijek vjeruj u odjeljku Povjerenje.

Vaš bi certifikat trebao izgledati otprilike ovako u Keychain Accessu ako ste do sada ispravno slijedili upute.

Korak 2: SSL certifikat domene

Korijenski SSL certifikat sada se može koristiti za izdavanje certifikata posebno za vaše lokalno razvojno okruženje smješteno na localhost.

Stvorite novu konfiguracijsku datoteku OpenSSL server.csr.cnftako da možete uvesti ove postavke prilikom stvaranja certifikata umjesto da ih unesete u naredbeni redak.

[req] default_bits = 2048 prompt = no default_md = sha256 distinguished_name = dn [dn] C=US ST=RandomState L=RandomCity O=RandomOrganization OU=RandomOrganizationUnit [email protected] CN = localhost

Stvorite v3.extdatoteku kako biste stvorili X509 v3 certifikat. Primijetite kako subjectAltNameovdje preciziramo .

authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = @alt_names [alt_names] DNS.1 = localhost

Stvorite ključ certifikata za localhostupotrebu konfiguracijskih postavki pohranjenih u server.csr.cnf. Ovaj je ključ pohranjen u server.key.

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

Zahtjev za potpisivanje certifikata izdaje se putem korijenskog SSL certifikata koji smo ranije kreirali za stvaranje certifikata domene za localhost. Rezultat je datoteka certifikata koja se naziva server.crt.

openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 500 -sha256 -extfile v3.ext

Upotrijebite svoj novi SSL certifikat

Sada ste spremni osigurati svoj localhostHTTPS. Pomicanje server.keyi server.crtdatoteke na pristupačnom mjestu na vašem poslužitelju te ih uključiti prilikom pokretanja poslužitelja.

U Express aplikaciji napisanoj u Node.js, evo kako biste to učinili. Obavezno to radite samo za svoje lokalno okruženje. Ne koristite ovo u proizvodnji .

Nadam se da vam je ovaj vodič bio koristan. Ako vam nije ugodno da sami izvršavate ovdje zadane naredbe, stvorio sam skup praktičnih skripti koje možete brzo pokrenuti da biste generirali certifikate za vas. Više detalja možete pronaći na GitHub repo-u.

Volim pomagati kolegama web programerima. Slijedite me na Twitteru i javite mi ako imate prijedloge ili povratne informacije. Ako želite pokazati zahvalnost prema bilo kojem poslu koji sam obavio, bio to post na blogu, projekt otvorenog koda ili samo smiješni tweet, možete mi kupiti šalicu kave.