SSL išdavimo automatizavimo link

Gana dažnai tenka dirbti su SSL sertifikatais. Prisiminkime sertifikato kūrimo ir įdiegimo procesą (bendruoju atveju daugumai).

  • Raskite teikėją (svetainę, kurioje galime nusipirkti SSL).
  • Sukurti CSR.
  • Nusiųskite jį savo paslaugų teikėjui.
  • Patvirtinkite domeno nuosavybės teisę.
  • Gaukite sertifikatą.
  • Konvertuokite sertifikatą į reikiamą formą (neprivaloma). Pavyzdžiui, iš pem į PKCS Nr. 12.
  • Įdiekite sertifikatą žiniatinklio serveryje.

Palyginti greitai, nesudėtinga ir suprantama. Ši parinktis yra gana tinkama, jei turime daugiausia dešimt projektų. Ką daryti, jei jų yra daugiau ir jie turi bent tris aplinkas? Klasikinis kūrėjas - pastatymas - gamyba. Tokiu atveju verta pagalvoti apie šio proceso automatizavimą. Siūlau šiek tiek pasigilinti į problemą ir rasti sprendimą, kuris dar labiau sumažintų laiką, skiriamą sertifikatų kūrimui ir priežiūrai. Straipsnyje bus problemos analizė ir nedidelis pakartojimo vadovas.

Leiskite rezervuoti iš anksto: pagrindinė mūsų įmonės specializacija yra .net ir atitinkamai IIS bei kiti su Windows susiję produktai. Todėl ACME klientas ir visi su juo susiję veiksmai taip pat bus aprašyti „Windows“ naudojimo požiūriu.

Kam tai aktualu ir kai kurie pradiniai duomenys

Įmonė K, atstovaujama autoriaus. URL (pavyzdžiui): company.tld

Projektas X yra vienas iš mūsų projektų, prie kurio dirbdamas priėjau išvados, kad dirbant su sertifikatais dar reikia judėti link maksimalaus laiko taupymo. Šiame projekte yra keturios aplinkos: kūrimo, testavimo, sustojimo ir gamybos. Kūrėjas ir bandymas yra mūsų pusėje, pastatymas ir gamyba yra kliento pusėje.

Ypatinga projekto savybė yra ta, kad jame yra daug modulių, kurie yra prieinami kaip subdomenai.

Tai yra, turime tokį paveikslėlį:

dev
testas
Pastatymas
gamyba

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
modulis1.projectX.tld

module2.projectX.dev.company.tld
module2.projectX.test.company.tld
module2.staging.projectX.tld
modulis2.projectX.tld

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

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

Gamybai naudojamas įsigytas pakaitos pažymėjimas, čia klausimų nekyla. Bet tai apima tik pirmąjį padomenio lygį. Atitinkamai, jei yra *.projectX.tld sertifikatas, jis veiks su staging.projectX.tld, bet ne su module1.staging.projectX.tld. Bet kažkaip nenoriu pirkti atskiro.

Ir tai tik remiantis vienos įmonės vieno projekto pavyzdžiu. Ir, žinoma, projektų yra ne vienas.

Dažnos priežastys, dėl kurių kiekvienas kreipiasi į šią problemą, atrodo maždaug taip:

  • Neseniai „Google“ pasiūlė sumažinti maksimalų SSL sertifikatų galiojimo laiką. Su visomis pasekmėmis.
  • Palengvinti SSL išdavimo ir priežiūros procesą vidiniams projektų ir visos įmonės poreikiams.
  • Centralizuotas sertifikatų įrašų saugojimas, kuris iš dalies išsprendžia domeno tikrinimo naudojant DNS ir vėlesnio automatinio atnaujinimo problemą, taip pat išsprendžia klientų pasitikėjimo problemą. Vis dėlto CNAME partnerio / atlikėjo įmonės serveryje yra patikimesnis nei trečiosios šalies šaltinyje.
  • Na, pagaliau, šiuo atveju puikiai tinka frazė „geriau turėti nei neturėti“.

SSL teikėjo pasirinkimas ir parengiamieji veiksmai

Tarp galimų nemokamų SSL sertifikatų parinkčių buvo apsvarstyti „Cloudflare“ ir „letsencrypt“. Šio (ir kai kurių kitų projektų) DNS priegloba yra „cloudflare“, bet aš nemėgstu naudoti jų sertifikatų. Todėl buvo nuspręsta naudoti letsencrypt.
Norėdami sukurti pakaitos simbolių SSL sertifikatą, turite patvirtinti domeno nuosavybės teisę. Ši procedūra apima tam tikro DNS įrašo (TXT arba CNAME) sukūrimą ir jo patikrinimą išduodant sertifikatą. Linux turi naudingumą - certbotas, kuri leidžia iš dalies (arba visiškai kai kuriems DNS teikėjams) automatizuoti šį procesą. „Windows“ nuo rasta ir patikrinta ACME kliento parinktys Aš apsisprendžiau WinACME.

Ir domeno įrašas sukurtas, pereikime prie sertifikato kūrimo:

SSL išdavimo automatizavimo link

Mus domina paskutinė išvada, ty galimos galimybės patvirtinti domeno nuosavybę išduodant pakaitos simbolio sertifikatą:

  1. Kurkite DNS įrašus rankiniu būdu (automatinis naujinimas nepalaikomas)
  2. DNS įrašų kūrimas naudojant acme-dns serverį (daugiau galite perskaityti apie čia.
  3. DNS įrašų kūrimas naudojant savo scenarijų (panašiai kaip certbot „Cloudflare“ papildinys).

Iš pirmo žvilgsnio trečias punktas yra gana tinkamas, bet ką daryti, jei DNS teikėjas nepalaiko šios funkcijos? Bet mums reikia bendro atvejo. Ir bendras atvejis yra CNAME įrašai, nes visi juos palaiko. Todėl sustojame 2 taške ir einame konfigūruoti savo ACME-DNS serverį.

ACME-DNS serverio ir sertifikatų išdavimo proceso nustatymas

Pavyzdžiui, sukūriau domeną 2nd.pp.ua ir naudosiu jį ateityje.

Privalomas reikalavimas Kad serveris veiktų tinkamai, jo domenui būtina sukurti NS ir A įrašus. Ir pirmasis nemalonus momentas, su kuriuo susidūriau, yra tai, kad „Cloudflare“ (bent jau laisvo naudojimo režimu) neleidžia vienu metu sukurti NS ir A įrašo tam pačiam kompiuteriui. Ne tai, kad tai yra problema, bet tai įmanoma. Parama atsakė, kad jų kolegija neleidžia to daryti. Jokių problemų, sukurkime du įrašus:

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

Šiame etape mūsų šeimininkas turėtų išspręsti acmens.2nd.pp.ua.

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

Bet acme.2nd.pp.ua jis neišsispręs, nes jį aptarnaujantis DNS serveris dar neveikia.

Įrašai sukurti, pereiname prie ACME-DNS serverio nustatymo ir paleidimo. Jis veiks mano ubuntu serveryje dokininkas konteinerį, bet galite jį paleisti bet kur, kur yra golangas. Windows taip pat visai tinka, bet man vis tiek labiau patinka Linux serveris.

Sukurkite reikiamus katalogus ir failus:

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

Naudokime vim su mėgstama teksto rengykle ir įklijuokite pavyzdį į config.cfg konfigūracija.

Sėkmingam darbui pakanka pataisyti bendrąsias ir api skyrius:

[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"
…

Be to, jei pageidaujate, pagrindiniame paslaugų kataloge sukursime docker-compose failą:

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

Paruošta. Galite paleisti.

$ docker-compose up -d

Šiame etape šeimininkas turėtų pradėti spręsti acme.2nd.pp.uair pasirodo 404 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

Jei tai nepasirodo - docker logs -f <container_name> laimei, žurnalai yra gana įskaitomi.

Galime pradėti kurti sertifikatą. Atidarykite „powershell“ kaip administratorių ir paleiskite „winacme“. Mus domina šie rinkimai:

  • M: sukurti naują sertifikatą (visos parinktys)
  • 2: rankinis įvestis
  • 2: [dns-01] Sukurkite patvirtinimo įrašus naudodami acme-dns (https://github.com/joohoi/acme-dns)
  • Paklausus apie nuorodą į ACME-DNS serverį, atsakyme įveskite sukurto serverio URL adresą (https). acme-dns serverio URL: https://acme.2nd.pp.ua

Atidaryme klientas išduoda įrašą, kurį reikia pridėti prie esamo DNS serverio (vienkartinė procedūra):

[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.

SSL išdavimo automatizavimo link

Sukuriame reikiamą įrašą ir įsitikiname, kad jis buvo sukurtas teisingai:

SSL išdavimo automatizavimo link

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

Patvirtiname, kad sukūrėme reikiamą įrašą winacme, ir tęsiame sertifikato kūrimo procesą:

SSL išdavimo automatizavimo link

Aprašyta, kaip naudoti certbot kaip klientą čia.

Taip baigiamas sertifikato kūrimo procesas; galite jį įdiegti žiniatinklio serveryje ir naudoti. Jei kurdami sertifikatą planuoklyje sukursite ir užduotį, tai ateityje sertifikato atnaujinimo procesas vyks automatiškai.

Šaltinis: www.habr.com

Добавить комментарий