Í átt að sjálfvirkni SSL útgáfu

Oft þurfum við að vinna með SSL vottorð. Við skulum muna ferlið við að búa til og setja upp vottorð (í almennu tilviki fyrir flesta).

  • Finndu þjónustuaðila (síðu þar sem við getum keypt SSL).
  • Búðu til CSR.
  • Sendu það til þjónustuveitunnar.
  • Staðfestu eignarhald á léni.
  • Fáðu skírteini.
  • Umbreyttu vottorðinu í tilskilið form (valfrjálst). Til dæmis, frá pem til PKCS #12.
  • Settu upp vottorðið á vefþjóninum.

Tiltölulega hratt, ekki flókið og skiljanlegt. Þessi valkostur hentar vel ef við erum með að hámarki tíu verkefni. Hvað ef þeir eru fleiri og þeir hafa að minnsta kosti þrjú umhverfi? Klassísk dev - sviðsetning - framleiðsla. Í þessu tilviki er það þess virði að hugsa um að gera þetta ferli sjálfvirkt. Ég legg til að kafa aðeins dýpra í vandamálið og finna lausn sem mun draga enn frekar úr þeim tíma sem fer í að búa til og viðhalda vottorðum. Greinin mun innihalda greiningu á vandamálinu og smá leiðbeiningar um endurtekningar.

Leyfðu mér að panta fyrirfram: aðal sérhæfing fyrirtækisins okkar er .net og, í samræmi við það, IIS og aðrar Windows tengdar vörur. Þess vegna verður ACME viðskiptavinurinn og öllum aðgerðum fyrir hann einnig lýst frá sjónarhóli notkunar Windows.

Fyrir hvern er þetta viðeigandi og nokkur frumgögn

Fyrirtæki K í forsvari fyrir hönd höfundar. Vefslóð (til dæmis): company.tld

Verkefni X er eitt af verkefnum okkar, meðan ég var að vinna að því komst ég að þeirri niðurstöðu að við þurfum enn að stefna í hámarks tímasparnað þegar unnið er með skírteini. Þetta verkefni hefur fjögur umhverfi: þróun, prófun, sviðsetningu og framleiðslu. Dev og próf eru á okkar hlið, sviðsetning og framleiðsla er á viðskiptavinamegin.

Sérstaða verkefnisins er að það hefur mikinn fjölda eininga sem eru fáanlegar sem undirlén.

Það er, við höfum eftirfarandi mynd:

dev
Próf
Staging
Framleiðsla

projectX.dev.company.tld
projectX.test.company.tld
staging.projectX.tld
projectX.tld

module1.projectX.dev.company.tld
module1.projectX.test.company.tld
module1.staging.projectX.tld
mát1.verkefniX.tld

module2.projectX.dev.company.tld
module2.projectX.test.company.tld
module2.staging.projectX.tld
mát2.verkefniX.tld

...
...
...
...

moduleN.projectX.dev.company.tld
moduleN.projectX.test.company.tld
moduleN.staging.projectX.tld
moduleN.projectX.tld

Við framleiðslu er notað keypt algildisskírteini, engar spurningar vakna hér. En það nær aðeins yfir fyrsta stig undirlénsins. Samkvæmt því, ef það er vottorð fyrir *.projectX.tld, þá mun það virka fyrir staging.projectX.tld, en ekki fyrir module1.staging.projectX.tld. En einhvern veginn vil ég ekki kaupa sér.

Og þetta er aðeins byggt á dæmi um eitt verkefni eins fyrirtækis. Og auðvitað eru verkefnin fleiri en eitt.

Algengar ástæður fyrir því að allir taka á þessu máli líta einhvern veginn svona út:

  • Nýlega Google lagði til að stytta hámarksgildistíma SSL vottorða. Með öllum afleiðingum.
  • Auðvelda ferlið við útgáfu og viðhald SSL fyrir innri þarfir verkefna og fyrirtækisins í heild.
  • Miðstýrð geymsla vottorðaskráa, sem leysir að hluta til vandamálið við staðfestingu léns með DNS og sjálfvirkri endurnýjun í kjölfarið, og leysir einnig vandamálið um traust viðskiptavina. Samt sem áður er CNAME á netþjóni samstarfs-/flytjendafyrirtækis áreiðanlegra en á auðlind þriðja aðila.
  • Jæja, loksins, í þessu tilfelli passar setningin „betra er að hafa en ekki“ fullkomlega.

Val á SSL-veitu og undirbúningsskref

Meðal tiltækra valkosta fyrir ókeypis SSL vottorð voru cloudflare og letsencrypt skoðaðir. DNS fyrir þetta (og sum önnur verkefni) er hýst af cloudflare, en ég er ekki aðdáandi þess að nota vottorðin þeirra. Því var ákveðið að nota letsencrypt.
Til að búa til SSL vottorð með algildisstaf þarftu að staðfesta eignarhald á léni. Þessi aðferð felur í sér að búa til einhverja DNS-skrá (TXT eða CNAME) og síðan staðfesta hana þegar skírteini er gefið út. Linux er með tól - certbot, sem gerir þér kleift að gera þetta ferli sjálfvirkt að hluta (eða algjörlega fyrir suma DNS veitendur). Fyrir Windows frá fundið og staðfest ACME viðskiptavinavalkostir sem ég sætti mig við WinACME.

Og skráin fyrir lénið hefur verið búin til, við skulum halda áfram að búa til vottorð:

Í átt að sjálfvirkni SSL útgáfu

Við höfum áhuga á síðustu niðurstöðunni, nefnilega tiltækum möguleikum til að staðfesta eignarhald á léni til að gefa út algildisvottorð:

  1. Búðu til DNS færslur handvirkt (sjálfvirk uppfærsla er ekki studd)
  2. Að búa til DNS færslur með acme-dns netþjóni (þú getur lesið meira um hér.
  3. Að búa til DNS færslur með því að nota eigin handrit (svipað og cloudflare viðbótinni fyrir certbot).

Við fyrstu sýn er þriðji punkturinn mjög hentugur, en hvað ef DNS-veitan styður ekki þessa virkni? En við þurfum almennt mál. En almenna málið er CNAME færslur, þar sem allir styðja þær. Þess vegna stoppum við við lið 2 og förum að stilla ACME-DNS netþjóninn okkar.

Uppsetning ACME-DNS miðlara og útgáfuferli skírteina

Til dæmis bjó ég til lénið 2nd.pp.ua og mun nota það í framtíðinni.

Lögboðin krafa Til að þjónninn virki rétt er nauðsynlegt að búa til NS og A færslur fyrir lénið sitt. Og fyrsta óþægilega augnablikið sem ég rakst á er að cloudflare (að minnsta kosti í ókeypis notkunarstillingu) leyfir þér ekki að búa til NS og A skrá samtímis fyrir sama gestgjafa. Ekki það að þetta sé vandamál, en í bindingu er það mögulegt. Stuðningurinn svaraði því til að pallborð þeirra leyfi ekki að gera þetta. Ekkert mál, búum til tvær færslur:

acmens.2nd.pp.ua. IN A 35.237.128.147
acme.2nd.pp.ua. IN NS acmens.2nd.pp.ua.

Á þessu stigi ætti gestgjafi okkar að leysa það acmens.2nd.pp.ua.

$ ping acmens.2nd.pp.ua
PING acmens.2nd.pp.ua (35.237.128.147) 56(84) bytes of data

En acme.2nd.pp.ua það mun ekki leysast, þar sem DNS-þjónninn sem þjónar því er ekki enn í gangi.

Skrárnar hafa verið búnar til, við höldum áfram að setja upp og ræsa ACME-DNS netþjóninn. Það mun lifa á ubuntu þjóninum mínum í bryggju ílát, en þú getur keyrt það hvar sem er þar sem golang er í boði. Windows hentar líka ágætlega en ég vil samt frekar Linux server.

Búðu til nauðsynlegar möppur og skrár:

$ mkdir config
$ mkdir data
$ touch config/config.cfg

Við skulum nota vim með uppáhalds textaritlinum þínum og líma sýnishornið inn í config.cfg stillingar.

Fyrir árangursríka aðgerð er nóg að leiðrétta almenna hluta og API:

[general]
listen = "0.0.0.0:53"
protocol = "both"
domain = "acme.2nd.pp.ua"
nsname = "acmens.2nd.pp.ua" 
nsadmin = "admin.2nd.pp.ua" 
records = 
    "acme.2nd.pp.ua. A 35.237.128.147",
    "acme.2nd.pp.ua. NS acmens.2nd.pp.ua.",                                                                                                                                                                                                  ]
...
[api]
...
tls = "letsencrypt"
…

Einnig, ef þess er óskað, munum við búa til docker-compose skrá í aðalþjónustuskránni:

version: '3.7'
services:
  acmedns:
    image: joohoi/acme-dns:latest
    ports:
      - "443:443"
      - "53:53"
      - "53:53/udp"
      - "80:80"
    volumes:
      - ./config:/etc/acme-dns:ro
      - ./data:/var/lib/acme-dns

Tilbúið. Þú getur keyrt það.

$ docker-compose up -d

Á þessu stigi ætti gestgjafinn að byrja að leysa acme.2nd.pp.ua, og 404 birtist á https://acme.2nd.pp.ua

$ ping acme.2nd.pp.ua
PING acme.2nd.pp.ua (35.237.128.147) 56(84) bytes of data.

$ curl https://acme.2nd.pp.ua
404 page not found

Ef þetta kemur ekki fram - docker logs -f <container_name> til að hjálpa, sem betur fer eru annálarnir nokkuð læsilegir.

Við getum byrjað að búa til skírteinið. Opnaðu powershell sem stjórnandi og keyrðu winacme. Við höfum áhuga á eftirfarandi kosningum:

  • M: Búðu til nýtt vottorð (fullir valkostir)
  • 2: Handvirkt inntak
  • 2: [dns-01] Búðu til staðfestingarskrár með acme-dns (https://github.com/joohoi/acme-dns)
  • Þegar spurt er um tengil á ACME-DNS netþjóninn skaltu slá inn vefslóð stofnaðs netþjóns (https) í svarinu. Vefslóð acme-dns þjónsins: https://acme.2nd.pp.ua

Í opnuninni gefur viðskiptavinurinn út skrá sem þarf að bæta við núverandi DNS netþjón (einu sinni aðferð):

[INFO] Creating new acme-dns registration for domain 1nd.pp.ua

Domain:              1nd.pp.ua
Record:               _acme-challenge.1nd.pp.ua
Type:                   CNAME
Content:              c82a88a5-499f-464f-96e4-be7f606a3b47.acme.2nd.pp.ua.
Note:                   Some DNS control panels add the final dot automatically.
                           Only one is required.

Í átt að sjálfvirkni SSL útgáfu

Við búum til nauðsynlega skrá og tryggjum að hún hafi verið búin til á réttan hátt:

Í átt að sjálfvirkni SSL útgáfu

$ dig CNAME _acme-challenge.1nd.pp.ua +short
c82a88a5-499f-464f-96e4-be7f606a3b47.acme.2nd.pp.ua.

Við staðfestum að við höfum búið til nauðsynlega færslu í winacme og höldum áfram ferlinu við að búa til vottorð:

Í átt að sjálfvirkni SSL útgáfu

Hvernig á að nota certbot sem viðskiptavin er lýst hér.

Þetta lýkur ferlinu við að búa til vottorð; þú getur sett það upp á vefþjóninum og notað það. Ef, þegar þú býrð til vottorð, býrðu líka til verkefni í tímaáætlunarkerfinu, þá mun endurnýjunarferlið vottorðs eiga sér stað sjálfkrafa í framtíðinni.

Heimild: www.habr.com

Bæta við athugasemd