Доста често мораме да работиме со SSL сертификати. Да се потсетиме на процесот на креирање и инсталирање сертификат (во општ случај за повеќето).
Најдете провајдер (страница каде што можеме да купиме SSL).
Генерирајте ООП.
Испратете го до вашиот провајдер.
Потврдете ја сопственоста на доменот.
Земете сертификат.
Претворете го сертификатот во потребната форма (опционално). На пример, од pem до PKCS #12.
Инсталирајте го сертификатот на веб-серверот.
Релативно брзо, не комплицирано и разбирливо. Оваа опција е сосема погодна ако имаме максимум десет проекти. Што ако ги има повеќе, а имаат барем три средини? Класичен дев - постановка - продукција. Во овој случај, вреди да се размислува за автоматизирање на овој процес. Предлагам да се навлезе малку подлабоко во проблемот и да се најде решение кое дополнително ќе го минимизира времето поминато за создавање и одржување на сертификати. Статијата ќе содржи анализа на проблемот и мал водич за повторување.
Дозволете ми да направам резервација однапред: главната специјализација на нашата компанија е .net и, соодветно, IIS и други производи поврзани со Windows. Затоа, клиентот ACME и сите дејства за него, исто така, ќе бидат опишани од гледна точка на користење на Windows.
За кого е ова релевантно и некои првични податоци
Компанијата К застапувана од авторот. URL (на пример): company.tld
Проектот Х е еден од нашите проекти, додека работев на кој дојдов до заклучок дека сè уште треба да се движиме кон максимална заштеда на време при работа со сертификати. Овој проект има четири средини: dev, тест, инсценација и продукција. Dev и test се на наша страна, инсценирањето и продукцијата се на страната на клиентот.
Посебна карактеристика на проектот е тоа што има голем број на модули кои се достапни како поддомени.
За производство, се користи купен сертификат за џокер, тука не се поставуваат прашања. Но, го опфаќа само првото ниво на поддоменот. Според тоа, ако има сертификат за *.projectX.tld, тогаш тој ќе работи за staging.projectX.tld, но не и за module1.staging.projectX.tld. Но, некако не сакам да купам посебно.
И ова се базира само на примерот на еден проект на една компанија. И, се разбира, има повеќе од еден проект.
Вообичаените причини за сите да се занимаваат со ова прашање изгледаат вака:
Олеснување на процесот на издавање и одржување на SSL за внатрешните потреби на проектите и на компанијата како целина.
Централизирано складирање на записи на сертификати, што делумно го решава проблемот со верификација на доменот со користење на DNS и последователно автоматско обновување, а исто така го решава и проблемот со довербата на клиентот. Сепак, CNAME на серверот на компанија партнер/изведувач е подоверлив отколку на ресурс од трета страна.
Па, конечно, во овој случај фразата „подобро е да имаш отколку да немаш“ совршено се вклопува.
Избор на SSL провајдер и подготвителни чекори
Меѓу достапните опции за бесплатни SSL сертификати, беа разгледани cloudflare и letsencrypt. DNS за овој (и некои други проекти) е хостиран од cloudflare, но јас не сум љубител на користење на нивните сертификати. Затоа, беше одлучено да се користи letsencrypt.
За да креирате SSL сертификат со џокер, треба да ја потврдите сопственоста на доменот. Оваа постапка вклучува создавање на одреден DNS запис (TXT или CNAME), а потоа негова потврда при издавање сертификат. Linux има алатка - сертификат, што ви овозможува делумно (или целосно за некои DNS провајдери) да го автоматизирате овој процес. За Windows од пронајдени и проверени ACME клиентски опции на кои се решив WinACME.
И записот за доменот е создаден, ајде да преминеме на создавање сертификат:
Ние сме заинтересирани за последниот заклучок, имено, достапните опции за потврдување на сопственоста на доменот за издавање сертификат за џокер:
Рачно креирајте записи DNS (автоматското ажурирање не е поддржано)
Креирање на записи DNS со помош на серверот acme-dns (можете да прочитате повеќе за тука.
Креирање на записи 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 секциите:
Во оваа фаза домаќинот треба да почне да се решава 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. Ние сме заинтересирани за изборите:
Кога ќе прашате за врска до серверот 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.
Ние го создаваме потребниот запис и се уверуваме дека е правилно креиран:
Потврдуваме дека го создадовме потребниот запис во winacme и продолжуваме со процесот на креирање сертификат:
Опишан е како да се користи certbot како клиент тука.
Ова го комплетира процесот на креирање сертификат; можете да го инсталирате на веб-серверот и да го користите. Ако, при креирањето на сертификатот, креирате и задача во распоредувачот, тогаш во иднина процесот на обновување на сертификатот ќе се случува автоматски.