Kuinka saada HTTPS toimimaan paikallisessa kehitysympäristössäsi 5 minuutissa

Lähes kaikki tänään vierailemasi verkkosivustot ovat HTTPS-suojattuja. Jos sinun ei vielä ole, sen pitäisi olla. Palvelimesi suojaaminen HTTPS: llä tarkoittaa myös, että et voi lähettää pyyntöjä tälle palvelimelle palvelimelta, jota ei ole suojattu HTTPS: llä. Tämä aiheuttaa ongelman kehittäjille, jotka käyttävät paikallista kehitysympäristöä, koska ne kaikki ovat //localhostvalmiita.

Käynnistyksen yhteydessä, johon olen osa, päätimme turvata AWS Elastic Load Balancer -päätepisteemme HTTPS: llä osana siirtoa turvallisuuden parantamiseksi. Törmäsin tilanteeseen, jossa paikallisen kehitysympäristön pyyntöjä palvelimelle alkoi hylätä.

Nopea Google-haku myöhemmin, löysin useita tämän tyyppisiä artikkeleita, tämän tai tämän, jossa on yksityiskohtaiset ohjeet siitä, miten voisin toteuttaa HTTPS: n localhost. Mikään näistä ohjeista ei näyttänyt toimivan edes sen jälkeen, kun seurasin niitä uskonnollisesti. Chrome heitti NET::ERR_CERT_COMMON_NAME_INVALIDminulle aina virheen.

Ongelma

Kaikki löytämäni yksityiskohtaiset ohjeet olivat oikein kirjoituksen ajankohtana. Ei enää.

Paljon Googlingin jälkeen huomasin, että syy paikallisen varmenteen hylkäämiseen oli, että Chrome oli vanhentanut todistusten commonName-yhteensopivuuden tukea, mikä vaati subjektiaAltName tammikuusta 2017 lähtien.

Ratkaisu

Luomme kaikki sertifikaatit OpenSSL: n avulla.

Vaihe 1: Juurin SSL-varmenne

Ensimmäinen vaihe on luoda SSL (Root Secure Sockets Layer) -sertifikaatti. Tätä juurivarmennetta voidaan sitten käyttää allekirjoittamaan mikä tahansa määrä varmenteita, jotka saatat luoda yksittäisille toimialueille. Jos et ole perehtynyt SSL-ekosysteemiin, tämä DNSimplen artikkeli tekee hyvää työtä Root SSL -varmenteiden käyttöönotossa.

Luo RSA-2048-avain ja tallenna se tiedostoon rootCA.key. Tätä tiedostoa käytetään avaimena SSL-juurivarmenteen luomiseen. Sinua pyydetään antamaan salasana, joka sinun on annettava joka kerta, kun käytät tätä avainta varmenteen luomiseen.

openssl genrsa -des3 -out rootCA.key 2048

Voit luoda luomasi avaimen uuden Root SSL -varmenteen luomiseen. Tallenna se tiedostoon nimeltä rootCA.pem. Tämän varmenteen voimassaoloaika on 1024 päivää. Voit vapaasti muuttaa sen haluamaasi päivien määrään. Sinulta kysytään myös muita valinnaisia ​​tietoja.

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

Vaihe 2: Luota SSL-juurivarmenteeseen

Ennen kuin voit käyttää juuri luotua Root SSL -varmentetta verkkotunnussertifikaattien myöntämisen aloittamiseen, on vielä yksi askel. Sinun on kerrottava Macillesi luottavan juurivarmenteeseesi, jotta myös kaikki sen myöntämät yksittäiset varmenteet luotetaan.

Avaa Mac-tietokoneesi Avainnipun käyttöoikeus ja siirry Järjestelmän avaimenperän Sertifikaatit-luokkaan. rootCA.pemTuo siellä tuoda käyttämällä Tiedosto> Tuo kohteet. Kaksoisnapsauta tuotua sertifikaattia ja vaihda Luottamus-osion pudotusvalikko Käytettäessä tätä varmentetta -asetukseksi Aina .

Sertifikaatin pitäisi näyttää tältä tältä Avainnipun käyttöoikeuden sisällä, jos olet noudattanut ohjeita tähän asti oikein.

Vaihe 2: Verkkotunnuksen SSL-varmenne

SSL-juurivarmentetta voidaan nyt käyttää myöntämään varmenne nimenomaan osoitteessa sijaitsevalle paikalliselle kehitysympäristölle localhost.

Luo uusi OpenSSL-määritystiedosto, server.csr.cnfjotta voit tuoda nämä asetukset sertifikaattia luodessasi sen sijaan, että kirjoitat niitä komentoriville.

[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

Luo v3.exttiedosto X509 v3 -sertifikaatin luomiseksi. Huomaa, miten määritämme subjectAltNametäällä.

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

Luo varmennusavain localhostsivustoon tallennettujen kokoonpanoasetusten käyttämistä varten server.csr.cnf. Tämä avain on tallennettu kohteeseen server.key.

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

Varmenteen allekirjoituspyyntö lähetetään SSL-juurivarmenteen kautta, jonka luomme aiemmin verkkotunnussertifikaatin luomiseksi localhost. Tulos on sertifikaattitiedosto nimeltä server.crt.

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

Käytä uutta SSL-varmentettasi

Olet nyt valmis suojaamaan localhostpuhelimesi HTTPS: llä. Siirrä server.keyja- server.crttiedostot palvelimen esteettömään sijaintiin ja sisällytä ne palvelinta käynnistettäessä.

Node.js: ssä kirjoitetussa Express-sovelluksessa voit tehdä sen seuraavasti. Varmista, että teet tämän vain paikallista ympäristöäsi varten. Älä käytä tätä tuotannossa .

Toivottavasti pidit tämän opetusohjelman hyödyllisenä. Jos et ole tyytyväinen itse antamiesi komentojen suorittamiseen, olen luonut joukon käteviä komentosarjoja, jotka voit suorittaa nopeasti varmenteiden luomiseksi sinulle. Lisätietoja löytyy GitHub-reposta.

Rakastan auttaa muita verkkokehittäjiä. Seuraa minua Twitterissä ja kerro minulle, jos sinulla on ehdotuksia tai palautetta. Jos haluat osoittaa arvostavasi mitä tahansa tekemääni työtä, olipa se sitten blogikirjoitus, avoimen lähdekoodin projekti tai vain hauska twiitti, voit ostaa minulle kupin kahvia.