Kohti SSL:n myöntämisen automatisointia

Usein joudumme työskentelemään SSL-varmenteiden kanssa. Muistakaamme varmenteen luomis- ja asennusprosessi (yleensä useimmille).

  • Etsi palveluntarjoaja (sivusto, josta voimme ostaa SSL:n).
  • Luo CSR.
  • Lähetä se palveluntarjoajalle.
  • Vahvista verkkotunnuksen omistajuus.
  • Hanki todistus.
  • Muunna varmenne vaadittuun muotoon (valinnainen). Esimerkiksi pemistä PKCS #12:een.
  • Asenna varmenne verkkopalvelimelle.

Suhteellisen nopea, ei monimutkainen ja ymmärrettävä. Tämä vaihtoehto on varsin sopiva, jos meillä on enintään kymmenen projektia. Entä jos niitä on enemmän ja niillä on vähintään kolme ympäristöä? Klassinen kehitys - lavastus - tuotanto. Tässä tapauksessa kannattaa harkita tämän prosessin automatisointia. Ehdotan, että syvennytään ongelmaan ja löydetään ratkaisu, joka minimoi entisestään varmenteiden luomiseen ja ylläpitoon kuluvaa aikaa. Artikkeli sisältää ongelman analyysin ja pienen oppaan toistoon.

Haluan tehdä varaus etukäteen: yrityksemme pääerikoisala on .net ja vastaavasti IIS ja muut Windowsiin liittyvät tuotteet. Siksi ACME-asiakas ja kaikki sen toiminnot kuvataan myös Windowsin käytön näkökulmasta.

Kenelle tämä on olennaista ja joitain alkutietoja

Tekijän edustama yritys K. URL (esimerkiksi): company.tld

Projekti X on yksi projekteistamme, jota työskennellessäni tulin siihen tulokseen, että sertifikaattien kanssa työskentelyssä on vielä siirryttävä kohti maksimaalista ajansäästöä. Tässä projektissa on neljä ympäristöä: kehittäjä, testi, lavastus ja tuotanto. Kehittäjä ja testaus ovat meidän puolellamme, lavastus ja tuotanto ovat asiakkaan puolella.

Projektin erityispiirre on, että siinä on suuri määrä moduuleja, jotka ovat käytettävissä aliverkkotunnuksina.

Eli meillä on seuraava kuva:

dev
Testi
Näyttämöllepano
Tuotanto

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

Tuotannossa käytetään ostettua jokerimerkkisertifikaattia, täällä ei synny kysymyksiä. Mutta se kattaa vain aliverkkotunnuksen ensimmäisen tason. Vastaavasti, jos *.projectX.tld:lle on olemassa varmenne, se toimii staging.projectX.tld:lle, mutta ei module1.staging.projectX.tld:lle. Mutta jotenkin en halua ostaa erillistä.

Ja tämä perustuu vain yhden yrityksen yhden projektin esimerkkiin. Ja tietysti projekteja on enemmän kuin yksi.

Yleiset syyt, joiden vuoksi kaikki puuttuvat tähän ongelmaan, näyttävät tältä:

  • Suhteellisen äskettäin Google ehdotti SSL-varmenteiden enimmäisvoimassaoloajan lyhentämistä. Kaikilla seurauksilla.
  • Helpottaa SSL:n myöntämis- ja ylläpitoprosessia projektien ja koko yrityksen sisäisiin tarpeisiin.
  • Varmennetietueiden keskitetty tallennus, joka osittain ratkaisee DNS:n avulla tapahtuvan verkkotunnuksen vahvistuksen ja myöhemmän automaattisen uusimisen ongelman sekä ratkaisee myös asiakkaan luottamusongelman. Kumppanin/esittäjäyrityksen palvelimella oleva CNAME on kuitenkin luotettavampi kuin kolmannen osapuolen resurssissa.
  • Lopuksi, tässä tapauksessa lause "on parempi olla kuin ei ole" sopii täydellisesti.

SSL-palveluntarjoajan valitseminen ja valmisteluvaiheet

Ilmaisten SSL-sertifikaattien vaihtoehdoista otettiin huomioon cloudflare ja letsencrypt. Tämän (ja joidenkin muiden projektien) DNS:ää isännöi cloudflare, mutta en ole heidän sertifikaattiensa käyttämisen ystävä. Siksi päätettiin käyttää letsencryptia.
Luodaksesi jokerimerkki-SSL-varmenteen sinun on vahvistettava verkkotunnuksen omistajuus. Tämä toimenpide sisältää DNS-tietueen (TXT tai CNAME) luomisen ja sen vahvistamisen varmennetta myönnettäessä. Linux siellä on apuohjelma - certbot, jonka avulla voit automatisoida tämän prosessin osittain (tai kokonaan joidenkin DNS-palveluntarjoajien kohdalla). Windows sama alkaen löydetty ja vahvistettu ACME-asiakasvaihtoehdot, joihin päädyin WinACME.

Ja verkkotunnuksen tietue on luotu, siirrytään varmenteen luomiseen:

Kohti SSL:n myöntämisen automatisointia

Olemme kiinnostuneita viimeisestä johtopäätöksestä, nimittäin käytettävissä olevista vaihtoehdoista verkkotunnuksen omistajuuden vahvistamiseksi jokerimerkkivarmenteen myöntämistä varten:

  1. Luo DNS-tietueet manuaalisesti (automaattista päivitystä ei tueta)
  2. DNS-tietueiden luominen acme-dns-palvelimella (voit lukea lisää täällä.
  3. DNS-tietueiden luominen omalla skriptilläsi (samanlainen kuin certbotin cloudflare-laajennus).

Ensi silmäyksellä kolmas kohta on varsin sopiva, mutta entä jos DNS-palveluntarjoaja ei tue tätä toimintoa? Mutta tarvitsemme yleisen tapauksen. Mutta yleinen tapaus on CNAME-tietueet, koska kaikki tukevat niitä. Siksi pysähdymme kohtaan 2 ja siirrymme ACME-DNS-palvelimemme konfigurointiin.

ACME-DNS-palvelimen määrittäminen ja varmenteen myöntämisprosessi

Loin esimerkiksi verkkotunnuksen 2nd.pp.ua ja aion käyttää sitä jatkossa.

Pakollinen vaatimus Jotta palvelin toimisi oikein, sen toimialueelle on luotava NS- ja A-tietueet. Ja ensimmäinen epämiellyttävä hetki, jonka kohtasin, on se, että cloudflare (ainakin vapaakäyttötilassa) ei salli sinun luoda samanaikaisesti NS- ja A-tietuetta samalle isännälle. Ei sillä, että tämä olisi ongelma, mutta sidottuna se on mahdollista. Tuki vastasi, että heidän paneelinsa ei salli tätä. Ei hätää, luodaan kaksi tietuetta:

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

Tässä vaiheessa isäntämme pitäisi ratkaista acmens.2nd.pp.ua.

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

Mutta acme.2nd.pp.ua se ei ratkea, koska sitä palveleva DNS-palvelin ei ole vielä käynnissä.

Tietueet on luotu, siirrytään ACME-DNS-palvelimen määrittämiseen ja käynnistämiseen. Isännöin sitä osoitteessa ubuntu palvelin sisään satamatyöläinen säilössä, mutta voit ajaa sitä missä tahansa, missä golang on saatavilla. Windows Tämäkin sopii varsin hyvin, mutta pidän silti parempana Linux palvelin.

Luo tarvittavat hakemistot ja tiedostot:

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

Käytä vimiä suosikkitekstieditorillasi ja liitä esimerkki tiedostoon config.cfg kokoonpano.

Onnistuneelle toiminnalle riittää yleis- ja api-osien korjaaminen:

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

Haluttaessa luomme myös Docker-Compose -tiedoston pääpalveluhakemistoon:

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. Voit ajaa sen.

$ docker-compose up -d

Tässä vaiheessa isännän pitäisi alkaa ratkaista acme.2nd.pp.ua, ja 404 tulee näkyviin 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

Jos tämä ei näy - docker logs -f <container_name> auttamaan, onneksi lokit ovat melko luettavia.

Voimme aloittaa varmenteen luomisen. Avaa powershell järjestelmänvalvojana ja suorita winacme. Olemme kiinnostuneita vaaleista:

  • M: Luo uusi varmenne (kaikki vaihtoehdot)
  • 2: Manuaalinen syöttö
  • 2: [dns-01] Luo vahvistustietueet acme-dns:llä (https://github.com/joohoi/acme-dns)
  • Kun kysytään linkistä ACME-DNS-palvelimeen, kirjoita vastaukseen luodun palvelimen URL-osoite (https). acme-dns-palvelimen URL-osoite: https://acme.2nd.pp.ua

Avauksessa asiakas antaa tietueen, joka on lisättävä olemassa olevaan DNS-palvelimeen (kertaluonteinen toimenpide):

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

Kohti SSL:n myöntämisen automatisointia

Luomme tarvittavan tietueen ja varmistamme, että se on luotu oikein:

Kohti SSL:n myöntämisen automatisointia

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

Vahvistamme, että olemme luoneet vaaditun merkinnän winacmeen, ja jatkamme varmenteen luomista:

Kohti SSL:n myöntämisen automatisointia

Certbotin käyttäminen asiakkaana kuvataan täällä.

Tämä viimeistelee varmenteen luomisen. Voit asentaa sen verkkopalvelimelle ja käyttää sitä. Jos luot varmennetta luodessasi myös tehtävän ajoittimeen, niin jatkossa varmenteen uusimisprosessi tapahtuu automaattisesti.

Lähde: will.com

Osta luotettava isännöinti sivustoille, joissa on DDoS-suojaus, VPS VDS -palvelimet 🔥 Osta luotettavaa verkkosivustojen hostingia DDoS-suojauksella, VPS VDS -palvelimilla | ProHoster