Кон автоматизација на издавањето SSL

Доста често мораме да работиме со SSL сертификати. Да се ​​потсетиме на процесот на креирање и инсталирање сертификат (во општ случај за повеќето).

  • Најдете провајдер (страница каде што можеме да купиме SSL).
  • Генерирајте ООП.
  • Испратете го до вашиот провајдер.
  • Потврдете ја сопственоста на доменот.
  • Земете сертификат.
  • Претворете го сертификатот во потребната форма (опционално). На пример, од pem до PKCS #12.
  • Инсталирајте го сертификатот на веб-серверот.

Релативно брзо, не комплицирано и разбирливо. Оваа опција е сосема погодна ако имаме максимум десет проекти. Што ако ги има повеќе, а имаат барем три средини? Класичен дев - постановка - продукција. Во овој случај, вреди да се размислува за автоматизирање на овој процес. Предлагам да се навлезе малку подлабоко во проблемот и да се најде решение кое дополнително ќе го минимизира времето поминато за создавање и одржување на сертификати. Статијата ќе содржи анализа на проблемот и мал водич за повторување.

Дозволете ми да направам резервација однапред: главната специјализација на нашата компанија е .net и, соодветно, IIS и други производи поврзани со Windows. Затоа, клиентот ACME и сите дејства за него, исто така, ќе бидат опишани од гледна точка на користење на Windows.

За кого е ова релевантно и некои првични податоци

Компанијата К застапувана од авторот. URL (на пример): company.tld

Проектот Х е еден од нашите проекти, додека работев на кој дојдов до заклучок дека сè уште треба да се движиме кон максимална заштеда на време при работа со сертификати. Овој проект има четири средини: dev, тест, инсценација и продукција. Dev и test се на наша страна, инсценирањето и продукцијата се на страната на клиентот.

Посебна карактеристика на проектот е тоа што има голем број на модули кои се достапни како поддомени.

Односно, ја имаме следната слика:

Dev
Тест
Стадинг
производство

projectX.dev.company.tld
projectX.test.company.tld
инсценирање.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

За производство, се користи купен сертификат за џокер, тука не се поставуваат прашања. Но, го опфаќа само првото ниво на поддоменот. Според тоа, ако има сертификат за *.projectX.tld, тогаш тој ќе работи за staging.projectX.tld, но не и за module1.staging.projectX.tld. Но, некако не сакам да купам посебно.

И ова се базира само на примерот на еден проект на една компанија. И, се разбира, има повеќе од еден проект.

Вообичаените причини за сите да се занимаваат со ова прашање изгледаат вака:

  • Неодамна Google предложи намалување на максималниот период на важност на SSL сертификатите. Со сите последици.
  • Олеснување на процесот на издавање и одржување на SSL за внатрешните потреби на проектите и на компанијата како целина.
  • Централизирано складирање на записи на сертификати, што делумно го решава проблемот со верификација на доменот со користење на DNS и последователно автоматско обновување, а исто така го решава и проблемот со довербата на клиентот. Сепак, CNAME на серверот на компанија партнер/изведувач е подоверлив отколку на ресурс од трета страна.
  • Па, конечно, во овој случај фразата „подобро е да имаш отколку да немаш“ совршено се вклопува.

Избор на SSL провајдер и подготвителни чекори

Меѓу достапните опции за бесплатни SSL сертификати, беа разгледани cloudflare и letsencrypt. DNS за овој (и некои други проекти) е хостиран од cloudflare, но јас не сум љубител на користење на нивните сертификати. Затоа, беше одлучено да се користи letsencrypt.
За да креирате SSL сертификат со џокер, треба да ја потврдите сопственоста на доменот. Оваа постапка вклучува создавање на одреден DNS запис (TXT или CNAME), а потоа негова потврда при издавање сертификат. Linux има алатка - сертификат, што ви овозможува делумно (или целосно за некои DNS провајдери) да го автоматизирате овој процес. За Windows од пронајдени и проверени ACME клиентски опции на кои се решив WinACME.

И записот за доменот е создаден, ајде да преминеме на создавање сертификат:

Кон автоматизација на издавањето SSL

Ние сме заинтересирани за последниот заклучок, имено, достапните опции за потврдување на сопственоста на доменот за издавање сертификат за џокер:

  1. Рачно креирајте записи DNS (автоматското ажурирање не е поддржано)
  2. Креирање на записи DNS со помош на серверот acme-dns (можете да прочитате повеќе за тука.
  3. Креирање на записи DNS со помош на сопствена скрипта (слично на приклучокот cloudflare за certbot).

На прв поглед, третата точка е сосема соодветна, но што ако давателот на DNS не ја поддржува оваа функционалност? Но, ни треба општ случај. И општ случај се записите CNAME, бидејќи сите ги поддржуваат. Затоа, застануваме на точка 2 и одиме да го конфигурираме нашиот ACME-DNS сервер.

Поставување на ACME-DNS сервер и процес на издавање сертификат

На пример, го создадов доменот 2nd.pp.ua и ќе го користам во иднина.

Задолжителен услов За серверот да работи правилно, неопходно е да се креираат записи NS и A за неговиот домен. И првиот непријатен момент што го наидов е дека cloudflare (барем во режим на бесплатна употреба) не дозволува истовремено да креирате NS и A запис за истиот хост. Не дека ова е проблем, но во врска тоа е можно. Поддршката одговори дека нивниот панел не дозволува да се направи тоа. Нема проблем, ајде да создадеме два записи:

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

Во оваа фаза, нашиот домаќин треба да реши acmens.2nd.pp.ua.

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

Но acme.2nd.pp.ua нема да се реши, бидејќи серверот DNS што го опслужува сè уште не работи.

Записите се создадени, продолжуваме со поставување и стартување на серверот ACME-DNS. Ќе живее на мојот Ubuntu сервер во докер контејнер, но можете да го пуштите насекаде каде што е достапен голанг. Виндоус е исто така доста погоден, но сепак претпочитам сервер за Линукс.

Направете ги потребните директориуми и датотеки:

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

Ајде да користиме vim со вашиот омилен уредувач на текст и да го залепиме примерокот во config.cfg конфигурација.

За успешно работење, доволно е да се поправат општите и api секциите:

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

Исто така, ако сакате, ќе создадеме датотека за составување на докер во главниот сервисен директориум:

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

Подготвени. Можете да го стартувате.

$ docker-compose up -d

Во оваа фаза домаќинот треба да почне да се решава acme.2nd.pp.ua, и 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

Ако ова не се појави - docker logs -f <container_name> за да помогне, за среќа, дневниците се доста читливи.

Можеме да започнеме со креирање на сертификатот. Отворете го Powershell како администратор и стартувајте го winacme. Ние сме заинтересирани за изборите:

  • М: Создадете нов сертификат (целосни опции)
  • 2: Рачно внесување
  • 2: [dns-01] Креирајте записи за потврда со acme-dns (https://github.com/joohoi/acme-dns)
  • Кога ќе прашате за врска до серверот ACME-DNS, внесете ја URL-то на креираниот сервер (https) во одговорот. URL на серверот acme-dns: https://acme.2nd.pp.ua

Во отворањето, клиентот издава запис што треба да се додаде на постоечкиот DNS сервер (еднократна процедура):

[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

Ние го создаваме потребниот запис и се уверуваме дека е правилно креиран:

Кон автоматизација на издавањето SSL

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

Потврдуваме дека го создадовме потребниот запис во winacme и продолжуваме со процесот на креирање сертификат:

Кон автоматизација на издавањето SSL

Опишан е како да се користи certbot како клиент тука.

Ова го комплетира процесот на креирање сертификат; можете да го инсталирате на веб-серверот и да го користите. Ако, при креирањето на сертификатот, креирате и задача во распоредувачот, тогаш во иднина процесот на обновување на сертификатот ќе се случува автоматски.

Извор: www.habr.com

Додадете коментар