Nei it automatisearjen fan de útjefte fan SSL

Hiel faak moatte wy wurkje mei SSL-sertifikaten. Lit ús ûnthâlde it proses fan it meitsjen en ynstallearjen fan in sertifikaat (yn it algemien gefal foar de measte).

  • Sykje in provider (in side wêr't wy SSL kinne keapje).
  • Generearje CSR.
  • Stjoer it nei de provider.
  • Befêstigje domein eigendom.
  • Krij in sertifikaat.
  • Konvertearje it sertifikaat nei de winske foarm (opsjoneel). Bygelyks, fan pem nei PKCS #12.
  • Ynstallearje it sertifikaat op 'e webtsjinner.

Relatyf fluch, maklik en begryplik. Dizze opsje is hiel geskikt as wy hawwe in maksimum fan in tsiental projekten. Wat as d'r mear binne, en se hawwe op syn minst trije omjouwings? Klassike dev - staging - produksje. Yn dit gefal is it wurdich te tinken oer it automatisearjen fan dit proses. Ik stel foar om in bytsje djipper yn it probleem te gean en in oplossing te finen dy't de tiid dy't bestege oan it meitsjen en ûnderhâlden fan sertifikaten fierder sil minimalisearje. It artikel sil in analyze fan it probleem befetsje en in lytse hantlieding foar werhelling.

Ik sil foarôf in reservearje meitsje: de wichtichste spesjalisaasje fan ús bedriuw is .net, en dus IIS en oare skroef-relatearre. Dêrom sil de ACME-kliïnt en alle aksjes dêrfoar ek wurde beskreaun yn termen fan it brûken fan finsters.

Foar wa't it relevant is en wat eftergrûngegevens

Company K fertsjintwurdige troch de skriuwer. URL (bygelyks): company.tld

Projekt X is ien fan ús projekten, wêrby't ik ta de konklúzje kaam dat wy by it wurkjen mei sertifikaten noch nei maksimale tiidbesparring moatte. Dit projekt hat fjouwer omjouwings: dev, test, staging en produksje. Dev en test binne oan ús kant, staging en produksje binne oan 'e klantkant.

In skaaimerk fan it projekt is dat it in grut oantal modules hat dy't beskikber binne as subdomeinen.

Dat is, wy hawwe de folgjende ôfbylding:

dev
test
Staging
produksje

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

Foar produksje wurdt in kocht wildcard-sertifikaat brûkt, hjir binne gjin fragen. Mar it beslacht allinich it earste nivo fan it subdomein. As d'r dus in sertifikaat is foar *.projectX.tld, dan sil it wurkje foar staging.projectX.tld, mar net foar module1.staging.projectX.tld. Ik wol gjin aparte keapje.

En dit is allinich op it foarbyld fan ien projekt fan ien bedriuw. En it projekt is fansels net allinnich.

De algemiene redenen foar it oanpakken fan dit probleem sjogge der sa út:

  • Recent Google stelde foar om de maksimale jildigensperioade fan SSL-sertifikaten te ferminderjen. Mei alle gefolgen.
  • Om it proses fan it útjaan en ûnderhâlden fan SSL te fasilitearjen foar de ynterne behoeften fan projekten en it bedriuw as gehiel.
  • Sintrale opslach fan sertifikaatrecords, dy't it probleem fan domeinvalidaasje foar in part oplost mei DNS en dêropfolgjende automatyske fernijing, en ek oplost it probleem fan klantfertrouwen. Dochs is CNAME mear betrouber op 'e tsjinner fan' e partner / útfierende bedriuw as op in boarne fan tredden.
  • No, úteinlik, yn dit gefal, past de útdrukking "better te hawwen dan net te hawwen" perfekt.

Selektearje in SSL-oanbieder en tariedende stappen

Fan 'e beskikbere opsjes foar fergese SSL-sertifikaten waarden cloudflare en letsencrypt beskôge. De DNS foar dit (en guon oare projekten) wurdt hosted troch cloudflare, mar ik bin gjin fan fan it brûken fan har sertifikaten. Dêrom waard besletten om letsencrypt te brûken.
Om in wildcard SSL-sertifikaat te meitsjen, moatte jo it eigendom fan it domein ferifiearje. Dizze proseduere omfettet it oanmeitsjen fan wat DNS-record (TXT of CNAME), mei de folgjende ferifikaasje by it útjaan fan in sertifikaat. Linux hat in hulpprogramma - certbot, wêrtroch jo dit proses foar in part (of folslein foar guon DNS-providers) kinne automatisearje. Foar Windows itselde út fûn en hifke opsjes foar ACME kliïnten ik fêstige op WinACME.

En it record foar it domein is oanmakke, litte wy trochgean mei it meitsjen fan in sertifikaat:

Nei it automatisearjen fan de útjefte fan SSL

Wy binne ynteressearre yn 'e lêste konklúzje, nammentlik de beskikbere opsjes foar it ferifiearjen fan domeinbesit foar it útjaan fan in wildcard-sertifikaat:

  1. DNS-records manuell oanmeitsje (automatyske fernijing wurdt net stipe)
  2. DNS-records oanmeitsje mei de acme-dns-tsjinner (sjoch foar mear details hjir.
  3. DNS-records oanmeitsje mei jo eigen skript (lykas de cloudflare-plugin foar certbot).

Op it earste each is it tredde punt hiel geskikt, mar as de DNS-provider dizze funksjonaliteit net stipet? En wy hawwe in algemiene saak nedich. En it algemiene gefal is CNAME records, elkenien stipet se. Dêrom stopje wy by punt 2, en gean nei it konfigurearjen fan ús ACME-DNS-tsjinner.

ACME-DNS tsjinner opset en sertifikaat útjefte proses

Bygelyks, ik makke de 2nd.pp.ua domein, en ik sil brûke it yn 'e takomst.

Ferplichte eask foar de juste wurking fan de tsjinner is it meitsjen fan NS- en A-records foar har domein. En it earste onaangename momint dat ik tsjinkaam is dat cloudflare (op syn minst yn 'e frije modus) jo net tagelyk in NS- en A-record meitsje kinne foar deselde host. Net dat dit in probleem is, mar yn binde is it mooglik. Stipe antwurde dat har paniel dit net tastean. It makket neat út, litte wy twa yngongen oanmeitsje:

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

Op dit stadium moatte wy de host oplosse acmens.2nd.pp.ua.

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

Mar acme.2nd.pp.ua sil net oplosse, om't de DNS-tsjinner dy't it tsjinnet noch net rint.

De records binne oanmakke, litte wy trochgean mei it ynstellen en starten fan de ACME-DNS-tsjinner. Ik sil it libje op Ubuntu-tsjinner yn docker container, mar jo kinne rinne it oeral dêr is golang. Windows is ek goed, mar ik leaver noch in Linux-tsjinner.

Meitsje de nedige mappen en bestannen:

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

Litte wy vim brûke mei jo favorite tekstbewurker en plakke it foarbyld yn config.cfg konfiguraasje.

Foar suksesfol wurk is it genôch om de algemiene en api-seksjes te korrigearjen:

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

Meitsje ek opsjoneel in docker-compose-bestân yn 'e haadmap fan' e tsjinst:

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

Klear. Jo kinne rinne.

$ docker-compose up -d

Op dit stadium moat de host begjinne te lossen acme.2nd.pp.ua, en ferskine 404 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

As dit net ferskynt - docker logs -f <container_name> om te helpen, goed, de logs binne frij lêsber.

Wy kinne begjinne mei it meitsjen fan in sertifikaat. Iepenje powershell as behearder en run winacme. Wy binne ynteressearre yn de ferkiezings:

  • M: Meitsje nij sertifikaat (folsleine opsjes)
  • 2: Hânlieding ynfier
  • 2: [dns-01] Meitsje ferifikaasjerecords mei acme-dns (https://github.com/joohoi/acme-dns)
  • As jo ​​​​frege oer in keppeling nei de ACME-DNS-tsjinner, fier dan de URL fan 'e oanmakke server (https) yn as antwurd. URL fan de acme-dns-tsjinner: https://acme.2nd.pp.ua

As antwurd jout de kliïnt in record út dat moat wurde tafoege oan de besteande DNS-tsjinner (ienmalige proseduere):

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

Nei it automatisearjen fan de útjefte fan SSL

Wy meitsje de nedige yngong, en soargje derfoar dat it goed is makke:

Nei it automatisearjen fan de útjefte fan SSL

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

Wy befêstigje dat wy de fereaske yngong hawwe makke yn winacme, en trochgean mei it proses fan it meitsjen fan in sertifikaat:

Nei it automatisearjen fan de útjefte fan SSL

Hoe certbot as klant te brûken wurdt beskreaun hjir.

Dit foltôget it proses fan it meitsjen fan in sertifikaat, jo kinne it ynstallearje op in webserver en brûke it. As jo, by it meitsjen fan in sertifikaat, ek in taak meitsje yn 'e planner, dan sil yn' e takomst it proses fan it bywurkjen fan it sertifikaat automatysk plakfine.

Boarne: www.habr.com

Add a comment