SSL-i väljastamise automatiseerimise poole

Üsna sageli peame töötama SSL-sertifikaatidega. Meenutagem sertifikaadi loomise ja installimise protsessi (üldjuhul enamiku puhul).

  • Leidke teenusepakkuja (sait, kust saame SSL-i osta).
  • Looge CSR.
  • Saatke see oma teenusepakkujale.
  • Kinnitage domeeni omandiõigus.
  • Hankige sertifikaat.
  • Teisendage sertifikaat nõutavale vormile (valikuline). Näiteks pemist PKCS nr 12-le.
  • Installige sertifikaat veebiserverisse.

Suhteliselt kiire, mitte keeruline ja arusaadav. See valik on üsna sobiv, kui meil on maksimaalselt kümme projekti. Mis siis, kui neid on rohkem ja neil on vähemalt kolm keskkonda? Klassikaline arendus - lavastus - tootmine. Sel juhul tasub mõelda selle protsessi automatiseerimisele. Teen ettepaneku probleemisse veidi süveneda ja leida lahendus, mis vähendab veelgi sertifikaatide loomisele ja hooldamisele kuluvat aega. Artikkel sisaldab probleemi analüüsi ja väikest juhendit kordamiseks.

Lubage mul eelnevalt broneerida: meie ettevõtte põhispetsialiseerumine on .net ja vastavalt IIS ja muud Windowsiga seotud tooted. Seetõttu kirjeldatakse ACME klienti ja kõiki sellega seotud toiminguid ka Windowsi kasutamise seisukohast.

Kelle jaoks see asjakohane on ja mõned lähteandmed

Ettevõte K, mida esindab autor. URL (näiteks): company.tld

Projekt X on üks meie projektidest, mille kallal töötades jõudsin järeldusele, et sertifikaatidega töötades tuleb siiski liikuda maksimaalse aja kokkuhoiu poole. Sellel projektil on neli keskkonda: arendus, test, lavastus ja tootmine. Arendus ja test on meie poolel, lavastus ja tootmine on kliendi poolel.

Projekti eripäraks on see, et sellel on suur hulk mooduleid, mis on saadaval alamdomeenidena.

See tähendab, et meil on järgmine pilt:

dev
test
Peatumine
Produktsioon

projectX.dev.company.tld
projectX.test.company.tld
lavastus.projectX.tld
projektX.tld

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

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

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

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

Tootmiseks kasutatakse ostetud metamärgi sertifikaati, siin ei teki küsimusi. Kuid see hõlmab ainult alamdomeeni esimest taset. Seega, kui *.projectX.tld jaoks on olemas sertifikaat, siis see töötab staging.projectX.tld jaoks, kuid mitte mooduli 1.staging.projectX.tld jaoks. Aga millegipärast ei taha ma eraldi osta.

Ja seda ainult ühe ettevõtte ühe projekti näitel. Ja loomulikult on projekte rohkem kui üks.

Üldised põhjused, miks kõik selle probleemiga tegelevad, näevad välja umbes sellised:

  • Hiljuti Google tegi ettepaneku lühendada SSL-sertifikaatide maksimaalset kehtivusaega. Kõigi tagajärgedega.
  • Hõlbustada SSL-i väljastamise ja hooldamise protsessi projektide ja ettevõtte kui terviku sisemiste vajaduste jaoks.
  • Sertifikaadikirjete tsentraliseeritud salvestamine, mis lahendab osaliselt DNS-i abil domeeni kontrollimise ja sellele järgneva automaatse uuendamise probleemi ning lahendab ka kliendi usalduse küsimuse. Siiski on partneri/esineja ettevõtte serveris olev CNAME usaldusväärsem kui kolmanda osapoole ressurss.
  • Noh, lõpuks, antud juhul sobib fraas "parem omada kui mitte omada".

SSL-i pakkuja valimine ja ettevalmistavad sammud

Tasuta SSL-sertifikaatide saadaolevate valikute hulgas kaaluti cloudflare'i ja letsencrypti. Selle (ja mõne muu projekti) DNS-i hostib cloudflare, kuid ma ei ole nende sertifikaatide kasutamise fänn. Seetõttu otsustati kasutada letsencrypti.
Metamärgiga SSL-sertifikaadi loomiseks peate kinnitama domeeni omandiõiguse. See protseduur hõlmab mõne DNS-kirje (TXT või CNAME) loomist ja seejärel selle kontrollimist sertifikaadi väljastamisel. Linuxil on utiliit - certbot, mis võimaldab teil seda protsessi osaliselt (või mõne DNS-i pakkuja puhul täielikult) automatiseerida. Windowsi jaoks alates leitud ja kinnitatud ACME kliendi valikud, millega ma otsustasin WinACME.

Ja domeeni kirje on loodud, jätkame sertifikaadi loomisega:

SSL-i väljastamise automatiseerimise poole

Oleme huvitatud viimasest järeldusest, nimelt saadaolevatest valikutest domeeni omandiõiguse kinnitamiseks metamärgi sertifikaadi väljastamiseks:

  1. DNS-kirjete loomine käsitsi (automaatset värskendamist ei toetata)
  2. DNS-kirjete loomine acme-dns serveri abil (saate lugeda lisateavet siin.
  3. DNS-kirjete loomine oma skripti abil (sarnaselt certboti cloudflare'i pistikprogrammiga).

Esmapilgul on kolmas punkt üsna sobiv, kuid mis siis, kui DNS-i pakkuja seda funktsiooni ei toeta? Kuid me vajame üldist juhtumit. Ja üldiselt on CNAME-kirjed, kuna kõik toetavad neid. Seetõttu peatume punktis 2 ja läheme konfigureerima oma ACME-DNS-serverit.

ACME-DNS serveri seadistamine ja sertifikaadi väljastamise protsess

Näiteks lõin domeeni 2nd.pp.ua ja kasutan seda ka edaspidi.

Kohustuslik nõue Serveri korrektseks tööks on vaja selle domeeni jaoks luua NS- ja A-kirjed. Ja esimene ebameeldiv hetk, millega ma kokku puutusin, on see, et cloudflare (vähemalt vabakasutuse režiimis) ei võimalda teil sama hosti jaoks samaaegselt NS- ja A-kirjet luua. Mitte, et see probleem oleks, kuid sidudes on see võimalik. Toetaja vastas, et nende paneel ei luba seda teha. Pole probleemi, loome kaks kirjet:

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

Selles etapis peaks meie võõrustaja lahendama acmens.2nd.pp.ua.

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

ja siin acme.2nd.pp.ua see ei lahene, kuna seda teenindav DNS-server ei tööta veel.

Kirjed on loodud, jätkame ACME-DNS-serveri seadistamise ja käivitamisega. See hakkab elama minu ubuntu serveris sadamatööline konteiner, kuid saate seda kasutada kõikjal, kus golang on saadaval. Windows on ka täitsa sobiv, aga eelistan siiski Linuxi serverit.

Looge vajalikud kataloogid ja failid:

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

Kasutame vimi teie lemmiktekstiredaktoriga ja kleepige näidis faili config.cfg seadistamine.

Edukaks tööks piisab üldiste ja api jaotiste parandamisest:

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

Samuti loome soovi korral põhiteenuste kataloogis dockeri koostamise faili:

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

Valmis. Saate seda käivitada.

$ docker-compose up -d

Selles etapis peaks peremees hakkama lahendama acme.2nd.pp.uaja kuvatakse 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

Kui see ei ilmu - docker logs -f <container_name> abiks on logid õnneks üsna loetavad.

Saame alustada sertifikaadi koostamist. Avage administraatorina powershell ja käivitage winacme. Oleme valimistest huvitatud:

  • M: Loo uus sertifikaat (kõik valikud)
  • 2: käsitsi sisend
  • 2: [dns-01] Looge kinnituskirjed rakendusega acme-dns (https://github.com/joohoi/acme-dns)
  • Kui küsitakse ACME-DNS-serveri lingi kohta, sisestage vastusesse loodud serveri URL (https). acme-dns serveri URL: https://acme.2nd.pp.ua

Avamisel väljastab klient kirje, mis tuleb lisada olemasolevasse DNS-serverisse (ühekordne protseduur):

[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 väljastamise automatiseerimise poole

Loome vajaliku kirje ja veendume, et see loodi õigesti:

SSL-i väljastamise automatiseerimise poole

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

Kinnitame, et oleme winacme'is vajaliku kirje loonud, ja jätkame sertifikaadi loomise protsessi:

SSL-i väljastamise automatiseerimise poole

Kirjeldatakse, kuidas certbot kliendina kasutada siin.

See lõpetab sertifikaadi loomise protsessi; saate selle veebiserverisse installida ja seda kasutada. Kui sertifikaadi loomisel koostad ka plaanijasse ülesande, siis edaspidi toimub sertifikaadi uuendamise protsess automaatselt.

Allikas: www.habr.com

Lisa kommentaar