Kaip per 5 minutes pasiekti, kad HTTPS veiktų jūsų vietos plėtros aplinkoje

Beveik bet kurią šiandien lankomą svetainę saugo HTTPS. Jei jūsų dar nėra, tai turėtų būti. Serverio apsauga naudojant HTTPS taip pat reiškia, kad negalite siųsti užklausų į šį serverį iš to, kurio neapsaugo HTTPS. Tai kelia problemų kūrėjams, kurie naudoja vietinę kūrimo aplinką, nes visi jie veikia //localhostiš anksto.

Paleidimo metu, kuriame esu dalis, nusprendėme apsaugoti „AWS Elastic Load Balancer“ galinius taškus naudodami HTTPS, kad padidintume saugumą. Patekau į situaciją, kai mano vietinės plėtros aplinkos užklausos serveriui pradėjo būti atmestos.

Greita „Google“ paieška vėliau, radau kelis panašius straipsnius, šį ar šį su išsamiais nurodymais, kaip galėčiau įdiegti HTTPS localhost. Atrodė, kad nė vienas iš šių nurodymų neveikia net ir tada, kai aš juos religingai vykdau. „Chrome“ visada NET::ERR_CERT_COMMON_NAME_INVALIDį mane įmesdavo klaidą.

Problema

Visos išsamios instrukcijos, kurias radau, buvo teisingos tuo metu, kai jos buvo parašytos. Jau nebe.

Po daugybės „Google“ paieškų atradau, kad mano vietinio sertifikato atmetimo priežastis buvo ta, kad „Chrome“ nebenaudojo „commonName“ atitikties sertifikatuose palaikymo, kuriam nuo 2017 m. Sausio mėn. Reikalingas „subjectAltName“.

Sprendimas

Visiems savo sertifikatams generuoti naudosime „OpenSSL“.

1 veiksmas: šakninis SSL sertifikatas

Pirmiausia reikia sukurti „Root Secure Sockets Layer“ (SSL) sertifikatą. Tada šį šakninį sertifikatą galima naudoti norint pasirašyti bet kokį sertifikatų skaičių, kurį galite sugeneruoti atskiriems domenams. Jei nesate susipažinę su SSL ekosistema, šis „DNSimple“ straipsnis yra geras darbas pristatant šakninius SSL sertifikatus.

Sugeneruokite RSA-2048 raktą ir išsaugokite jį faile rootCA.key. Šis failas bus naudojamas kaip raktas kuriant šakninį SSL sertifikatą. Jums bus pasiūlyta įvesti frazę, kurią turėsite įvesti kiekvieną kartą, kai naudosite šį raktą kurdami sertifikatą.

openssl genrsa -des3 -out rootCA.key 2048

Sukurtą raktą galite naudoti kurdami naują „Root SSL“ sertifikatą. Išsaugokite jį faile pavadinimu rootCA.pem. Šis sertifikatas galios 1024 dienas. Nedvejodami pakeiskite jį į norimą dienų skaičių. Taip pat būsite paraginti pateikti kitos pasirenkamos informacijos.

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

2 žingsnis: pasitikėkite šakniniu SSL sertifikatu

Prieš pradėdami naudoti domeno sertifikatus galite naudoti naujai sukurtą šakinį SSL sertifikatą, reikia atlikti dar vieną žingsnį. Turite pasakyti „Mac“, kad jis pasitiki jūsų šakniniu sertifikatu, todėl visi jo išduoti sertifikatai taip pat yra patikimi.

„Mac“ kompiuteryje atidarykite „Keychain Access“ ir eikite į „System Keychain“ kategoriją „Certificates“. Kai būsite, importuokite rootCA.pemnaudodami Failas> Importuoti elementus. Dukart spustelėkite importuotą sertifikatą ir skyriuje „Patikimumas “ pakeiskite išskleidžiamąjį meniu „Kai naudojate šį sertifikatą:“ į Visada .

Jūsų pažymėjimas turėtų atrodyti maždaug taip, kaip „Keychain Access“, jei iki šiol tinkamai vykdėte instrukcijas.

2 žingsnis: Domeno SSL sertifikatas

Šakninis SSL sertifikatas dabar gali būti naudojamas norint išduoti sertifikatą, skirtą jūsų vietinei kūrimo aplinkai, esančiai localhost.

Sukurkite naują „OpenSSL“ konfigūracijos failą, server.csr.cnfkad galėtumėte importuoti šiuos parametrus kurdami sertifikatą, o ne įvesti juos į komandinę eilutę.

[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

Sukurkite v3.extfailą, kad sukurtumėte X509 v3 sertifikatą. Atkreipkite dėmesį, kaip mes subjectAltNamečia nurodome .

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

Sukurkite sertifikato raktą, localhostnaudodamiesi konfigūracijos nustatymais, išsaugotais server.csr.cnf. Šis raktas saugomas server.key.

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

Sertifikato pasirašymo užklausa išduodama per pagrindinį SSL sertifikatą, kurį anksčiau sukūrėme domeno sertifikatui sukurti localhost. Išvestis yra sertifikato failas, vadinamas server.crt.

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

Naudokite naują SSL sertifikatą

Dabar esate pasirengę apsaugoti savo localhosttelefoną naudodami HTTPS. Perkelkite server.keyir server.crtfailus į prieinamą vietą savo serveryje ir įtraukite juos paleidę serverį.

„Express“ programoje, parašytoje „Node.js“, štai kaip tai padarytumėte. Įsitikinkite, kad tai darote tik savo aplinkai. Nenaudokite to gamyboje .

Tikiuosi, kad ši pamoka jums buvo naudinga. Jei jums nepatinka vykdyti čia pateiktas komandas, aš sukūriau patogių scenarijų rinkinį, kurį galite greitai paleisti, kad sugeneruotumėte sertifikatus. Daugiau informacijos galite rasti „GitHub“ repo.

Man patinka padėti kitiems interneto kūrėjams. Sekite mane „Twitter“ ir praneškite man, jei turite kokių nors pasiūlymų ar atsiliepimų. Jei norite parodyti savo dėkingumą bet kuriam mano atliktam darbui - tinklaraščio įrašui, atviro kodo projektui ar tiesiog juokingam tweet'ui, galite nusipirkti puodelį kavos.