Hogyan juthat el a HTTPS a helyi fejlesztői környezetéhez 5 perc alatt

Szinte minden ma látogatott webhelyet HTTPS véd. Ha a tiéd még nincs, annak kellene lennie. A szerver HTTPS-sel történő védelme azt is jelenti, hogy nem küldhet kéréseket erre a kiszolgálóra olyan szervertől, amelyet nem védett a HTTPS. Ez problémát jelent azoknak a fejlesztőknek, akik helyi fejlesztési környezetet használnak, mivel mindannyian elölről futnak //localhost.

Az induláskor, amelynek része vagyok, úgy döntöttünk, hogy a biztonság növelése érdekében az AWS Elastic Load Balancer végpontjainkat HTTPS-sel rögzítjük. Olyan helyzetbe kerültem, amikor a helyi fejlesztői környezetem szerverhez intézett kéréseit elutasították.

Később egy gyors Google-keresés során több ilyen cikket találtam, ezt vagy ezt, amelyek részletes utasításokat tartalmaznak a HTTPS megvalósítására localhost. Úgy tűnt, hogy ezek az utasítások még akkor sem működnek, ha vallásosan betartottam őket. A Chrome mindig NET::ERR_CERT_COMMON_NAME_INVALIDhibát vetett rám.

A probléma

Az összes részletes utasítás, amelyet találtam, helyes volt a megírásuk idejére. Többé nem.

Rengeteg Google-keresés után rájöttem, hogy a helyi tanúsítványom elutasításának oka az volt, hogy a Chrome 2017 januárja óta elavult a tanúsítványokban a commonName egyeztetés támogatásához, és valójában egy subjectAltName-t igényelt.

A megoldás

Az összes tanúsítványunk előállításához az OpenSSL-t fogjuk használni.

1. lépés: Gyökér SSL tanúsítvány

Az első lépés egy Root Secure Sockets Layer (SSL) tanúsítvány létrehozása. Ezt a gyökértanúsítványt ezután bármilyen számú tanúsítvány aláírásához felhasználhatja, amelyet az egyes domainekhez generálhat. Ha még nem ismeri az SSL ökoszisztémát, a DNSimple ezen cikke jó munkát végez a Root SSL tanúsítványok bevezetésével.

Generáljon egy RSA-2048 kulcsot, és mentse egy fájlba rootCA.key. Ezt a fájlt fogják használni a gyökér SSL tanúsítvány előállításához. A rendszer kérni fogja a megfelelő kifejezést, amelyet minden alkalommal be kell írnia, amikor ezt a kulcsot használja a tanúsítvány előállításához.

openssl genrsa -des3 -out rootCA.key 2048

A létrehozott kulcs segítségével létrehozhat egy új Root SSL tanúsítványt. Mentse el egy nevű fájlba rootCA.pem. A tanúsítvány érvényessége 1024 nap. Nyugodtan változtassa meg tetszőleges számú napra. Ezenkívül további opcionális információkat is kérni fog.

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

2. lépés: Bízzon a gyökér SSL tanúsítványban

Mielőtt az újonnan létrehozott Root SSL tanúsítványt felhasználhatja a tartományi tanúsítványok kiadásának megkezdéséhez, még egy lépés van. El kell mondania a Mac-nek, hogy bízzon a gyökértanúsítványban, így az általa kiadott minden egyes tanúsítvány is megbízható.

Nyissa meg a Kulcstartó hozzáférést a Mac számítógépén, és lépjen a Rendszer kulcstartó Tanúsítványok kategóriájába. Miután odaért, importálja a rootCA.pemFájl> Elemek importálása parancsot. Kattintson duplán az importált tanúsítványra, és a Megbízhatóság szakaszban változtassa meg a „Ha ezt a tanúsítványt használja:” legördülő listát Mindig megőrzi.

A tanúsítványának valami ilyennek kell kinéznie a Kulcstartó hozzáférés belsejében, ha eddig megfelelően követte az utasításokat.

2. lépés: Tartományi SSL-tanúsítvány

A gyökér SSL tanúsítvány mostantól felhasználható egy tanúsítvány kiállítására, amely kifejezetten a (z) helyen található helyi fejlesztői környezetre vonatkozik localhost.

Hozzon létre egy új OpenSSL konfigurációs fájlt, server.csr.cnfígy importálhatja ezeket a beállításokat tanúsítvány létrehozásakor ahelyett, hogy beírná őket a parancssorba.

[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

Hozzon létre egy v3.extfájlt az X509 v3 tanúsítvány létrehozásához. Figyelje meg, hogyan határozunk meg subjectAltNameitt.

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

Hozzon létre egy tanúsítványkulcsot localhosta server.csr.cnf. Ez a kulcs tárolja server.key.

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

Tanúsítvány-aláírási kérelmet a korábban létrehozott SSL-gyökér tanúsítványon keresztül adunk ki, amelynek létrehozásához tartományi tanúsítványt készítettünk localhost. A kimenet egy tanúsítványfájl server.crt.

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

Használja az új SSL tanúsítványt

Most már készen áll localhosta HTTPS használatával történő biztonságra . Vigye a server.keyés server.crtfájlokat egy elérhető helyre a szerveren, és vegye fel őket a szerver indításakor.

A Node.js fájlban írt Express alkalmazásban a következőképpen teheti meg. Győződjön meg róla, hogy ezt csak a helyi környezetének teszi. Ne használja ezt a gyártás során .

Remélem, hasznosnak találta ezt az oktatóanyagot. Ha nem érzi jól magát az itt megadott parancsok futtatása, létrehoztam egy praktikus szkriptkészletet, amelyet gyorsan futtathat a tanúsítványok előállításához. További részletek a GitHub repóban találhatók.

Szeretek segíteni webfejlesztő társaimnak. Kövessen a Twitteren, és tudassa velem, ha van javaslata vagy visszajelzése. Ha szeretné értékelni az általam végzett munkát, legyen szó blogbejegyzésről, nyílt forráskódú projektről vagy csak egy vicces tweetről, vásárolhat nekem egy csésze kávét.