Richtung Automatisatioun vun SSL Emissioun

Zimlech dacks musse mir mat SSL Zertifikater schaffen. Loosst eis de Prozess erënneren fir en Zertifika ze kreéieren an z'installéieren (am allgemenge Fall fir déi meescht).

  • Fannt e Provider (e Site wou mir SSL kënne kafen).
  • CSR generéieren.
  • Schéckt et un Äre Provider.
  • Verifizéiert Domain Besëtzer.
  • Kréien e Certificat.
  • Konvertéiert den Zertifika an déi erfuerderlech Form (optional). Zum Beispill, vu Pem op PKCS #12.
  • Installéiert den Zertifika um Webserver.

Relativ séier, net komplizéiert a verständlech. Dës Optioun ass ganz gëeegent wa mir maximal zéng Projeten hunn. Wat wann et méi vun hinnen sinn, a si hunn op d'mannst dräi Ëmfeld? Klassesch Dev - Inszenéierung - Produktioun. An dësem Fall ass et derwäert ze denken iwwer d'Automatisatioun vun dësem Prozess. Ech proposéieren e bësse méi déif an de Problem ze verdéiwen an eng Léisung ze fannen, déi d'Zäit fir d'Erstelle an d'Erhalen vun Zertifikater weider ze minimiséieren. Den Artikel enthält eng Analyse vum Problem an e klenge Guide fir Widderhuelung.

Loosst mech am Viraus reservéieren: d'Haaptspezialisatioun vun eiser Firma ass .net, an deementspriechend IIS an aner Windows-Zesummenhang Produkter. Dofir wäert den ACME Client an all Aktiounen dofir och aus der Siicht vum Windows benotzt ginn.

Fir wien ass dat relevant an e puer initial Donnéeën

Firma K vertrueden vum Auteur. URL (zum Beispill): company.tld

De Projet X ass ee vun eise Projeten, wärend ech geschafft hunn, un deem ech zur Conclusioun komm sinn datt mir nach ëmmer a maximal Zäitspuere musse goen wann Dir mat Zertifikater schaffen. Dëse Projet huet véier Ëmfeld: Dev, Test, Inszenéierung a Produktioun. Dev an Test sinn op eiser Säit, Inszenéierung a Produktioun sinn op der Client Säit.

Eng speziell Feature vum Projet ass datt et eng grouss Zuel vu Moduler huet, déi als Subdomains verfügbar sinn.

Dat ass, mir hunn déi folgend Bild:

Dev
Test
Staging
Produktioun

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

Fir d'Produktioun gëtt e kaaft Wildcard Zertifikat benotzt, hei stelle keng Froen. Awer et deckt nëmmen den éischten Niveau vum Subdomain. Deementspriechend, wann et e Certificat fir *.projectX.tld ass, da funktionnéiert et fir staging.projectX.tld, awer net fir module1.staging.projectX.tld. Awer iergendwéi wëll ech net eng separat kafen.

An dat baséiert nëmmen um Beispill vun engem Projet vun enger Firma. An natierlech gëtt et méi wéi ee Projet.

Allgemeng Grënn fir jidderee fir dëst Thema unzegoen kucken sou eppes aus:

  • Viru kuerzem Google huet proposéiert déi maximal Validitéitsperiod vun SSL Certificaten ze reduzéieren. Mat all de Konsequenzen.
  • Erliichtert de Prozess fir SSL auszeginn an z'erhalen fir déi intern Bedierfnesser vu Projeten an d'Firma als Ganzt.
  • Zentraliséierter Lagerung vun Zertifikat records, déi deelweis de Problem vun der Domainverifizéierung mat DNS a spéider automatesch Erneierung léist, an och d'Thema vum Client Vertrauen léist. Trotzdem ass e CNAME um Server vun enger Partner / Performerfirma méi zouverléisseg wéi op enger Drëtt Partei Ressource.
  • Gutt, endlech, an dësem Fall passt den Ausdrock "et ass besser ze hunn wéi net ze hunn" perfekt.

Auswiel vun engem SSL Provider a Virbereedungsstage

Ënnert de verfügbaren Optiounen fir gratis SSL Zertifikater goufen Cloudflare a Letsencrypt berücksichtegt. D'DNS fir dëst (an e puer aner Projeten) gëtt vun Cloudflare gehost, awer ech sinn kee Fan fir hir Certificaten ze benotzen. Dofir gouf decidéiert letsencrypt ze benotzen.
Fir e Wildcard SSL Zertifika ze kreéieren, musst Dir d'Domain Besëtzer bestätegen. Dës Prozedur beinhalt d'Erstelle vun engem DNS-Rekord (TXT oder CNAME), an dann z'iwwerpréiwen wann Dir e Certificat ausgëtt. Linux huet en Utility - certbot, wat Iech erlaabt deelweis (oder komplett fir e puer DNS Ubidder) dëse Prozess ze automatiséieren. Fir Windows aus fonnt a verifizéiert ACME Client Optiounen ech niddergelooss op WinACME.

An de Rekord fir d'Domain gouf erstallt, loosst eis weidergoen fir en Zertifika ze kreéieren:

Richtung Automatisatioun vun SSL Emissioun

Mir sinn un der leschter Conclusioun interesséiert, nämlech déi verfügbar Optiounen fir d'Domainbesëtzung ze bestätegen fir e Wildcard Zertifikat auszeginn:

  1. Erstellt DNS records manuell (automatesch Update gëtt net ënnerstëtzt)
  2. DNS records erstellen mat acme-dns Server (Dir kënnt méi liesen iwwer hei.
  3. DNS-Records erstellen mat Ärem eegene Skript (ähnlech wéi de Cloudflare Plugin fir certbot).

Op den éischte Bléck ass den drëtte Punkt ganz gëeegent, awer wat wann den DNS Provider dës Funktionalitéit net ënnerstëtzt? Awer mir brauchen en allgemenge Fall. An den allgemenge Fall ass CNAME records, well jidderee se ënnerstëtzt. Dofir stoppen mir um Punkt 2 a gitt fir eisen ACME-DNS Server ze konfiguréieren.

Astelle ACME-DNS Server an Zertifikat Emissioun Prozess

Zum Beispill hunn ech d'Domain 2nd.pp.ua erstallt, a wäert et an Zukunft benotzen.

Obligatoresch Ufuerderung Fir datt de Server richteg funktionnéiert, ass et néideg NS an A records fir säin Domain ze kreéieren. An den éischten onsympathesche Moment, deen ech begéint hunn, ass datt Cloudflare (op d'mannst am fräie Gebrauchsmodus) Iech net erlaabt gläichzäiteg en NS an A Rekord fir dee selwechte Host ze kreéieren. Net datt dëst e Problem ass, awer am Bind ass et méiglech. D'Ënnerstëtzung huet geäntwert datt hire Panel dëst net erlaabt. Kee Problem, loosst eis zwee Rekorder erstellen:

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

Op dëser Etapp soll eise Host léisen acmens.2nd.pp.ua.

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

Awer acme.2nd.pp.ua et wäert net léisen, well den DNS Server deen et servéiert nach net leeft.

D'Opzeechnunge goufen erstallt, mir fuere weider fir den ACME-DNS Server opzestellen an ze starten. Et wäert op mengem Ubuntu Server liewen Docker Container, awer Dir kënnt et iwwerall lafen wou Golang verfügbar ass. Windows ass och ganz gëeegent, awer ech léiwer nach ëmmer e Linux Server.

Erstellt déi néideg Verzeichnisser a Dateien:

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

Loosst eis vim mat Ärem Liiblingstexteditor benotzen a paste d'Probe an config.cfg Configuratioun.

Fir erfollegräich Operatioun ass et genuch fir d'allgemeng an API Sektiounen ze korrigéieren:

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

Och, wann Dir wëllt, erstellen mir eng Docker-Compose Datei am Haaptserviceverzeechnes:

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

Fäerdeg. Dir kënnt et lafen.

$ docker-compose up -d

Op dëser Etapp soll de Host ufänken ze léisen acme.2nd.pp.ua, an e 404 erschéngt op 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

Wann dëst net erschéngt - docker logs -f <container_name> ze hëllefen, glécklecherweis, d'Logbicher sinn ganz liesbar.

Mir kënnen ufänken den Zertifika ze kreéieren. Open Powershell als Administrator a lafen winacme. Mir interesséieren eis fir d'Wahlen:

  • M: Neien Zertifika erstellen (voll Optiounen)
  • 2: Manuell Input
  • 2: [dns-01] Erstellt Verifizéierungsrecords mat acme-dns (https://github.com/joohoi/acme-dns)
  • Wann Dir iwwer e Link op den ACME-DNS Server gefrot gëtt, gitt d'URL vum erstallte Server (https) an der Äntwert. URL vum acme-dns Server: https://acme.2nd.pp.ua

An der Ouverture gëtt de Client e Rekord eraus, deen un den existente DNS-Server bäigefüügt muss ginn (eemol Prozedur):

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

Richtung Automatisatioun vun SSL Emissioun

Mir kreéieren den néidege Rekord a stellen sécher datt et richteg erstallt gouf:

Richtung Automatisatioun vun SSL Emissioun

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

Mir bestätegen datt mir déi erfuerderlech Entrée an winacme erstallt hunn, a weider de Prozess fir e Certificat ze kreéieren:

Richtung Automatisatioun vun SSL Emissioun

Wéi benotzt certbot als Client gëtt beschriwwen hei.

Dëst fäerdeg de Prozess fir en Zertifika ze kreéieren; Dir kënnt et um Webserver installéieren an et benotzen. Wann Dir, wann Dir e Certificat erstellt, och eng Aufgab am Scheduler erstellt, da wäert an Zukunft den Zertifikat Erneierungsprozess automatesch geschéien.

Source: will.com

Setzt e Commentaire