SSL беруді автоматтандыру бағытында

Біз жиі SSL сертификаттарымен жұмыс істеуге тура келеді. Сертификат жасау және орнату процесін еске түсірейік (көпшілік үшін жалпы жағдайда).

  • Провайдерді табыңыз (SSL сатып алатын сайт).
  • CSR жасаңыз.
  • Оны провайдеріңізге жіберіңіз.
  • Домен иелігін растаңыз.
  • Сертификат алыңыз.
  • Куәлікті қажетті пішінге түрлендіру (міндетті емес). Мысалы, пемнен PKCS №12 дейін.
  • Сертификатты веб-серверге орнатыңыз.

Салыстырмалы түрде жылдам, күрделі емес және түсінікті. Егер бізде ең көбі он жоба болса, бұл опция өте қолайлы. Егер олардың саны көбірек болса және олардың кем дегенде үш ортасы болса ше? Классикалық әзірлеу - сахналау - өндіріс. Бұл жағдайда бұл процесті автоматтандыру туралы ойлануға тұрарлық. Мен мәселеге тереңірек үңіліп, сертификаттарды жасауға және сақтауға кететін уақытты одан әрі азайтатын шешім табуды ұсынамын. Мақалада мәселенің талдауы және қайталауға арналған шағын нұсқаулық болады.

Маған алдын ала тапсырыс беруге рұқсат етіңіз: біздің компанияның негізгі мамандануы .net және сәйкесінше, IIS және Windows-қа қатысты басқа өнімдер. Сондықтан ACME клиенті және оған арналған барлық әрекеттер Windows-ты пайдалану тұрғысынан да сипатталады.

Бұл кімге қатысты және кейбір бастапқы деректер

K компаниясы автормен ұсынылған. URL (мысалы): company.tld

X жобасы - бұл біздің жобаларымыздың бірі, онымен жұмыс істеу барысында мен сертификаттармен жұмыс істеу кезінде уақытты барынша үнемдеуге көшу керек деген қорытындыға келдім. Бұл жобаның төрт ортасы бар: әзірлеу, сынақ, сахналау және өндіру. Әзірлеу және сынақ біз жақта, қою және өндіріс клиент жағында.

Жобаның ерекшелігі - оның субдомендері ретінде қол жетімді көптеген модульдер саны бар.

Яғни, бізде келесі сурет бар:

Dev
сынақ
Кездесу
өнім

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

Өндіріс үшін сатып алынған қойылмалы таңба сертификаты пайдаланылады, мұнда сұрақтар туындамайды. Бірақ ол ішкі доменнің бірінші деңгейін ғана қамтиды. Сәйкесінше, *.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. acme-dns серверін пайдаланып DNS жазбаларын жасау (толығырақ осында.
  3. Жеке сценарийді пайдаланып DNS жазбаларын жасау (certbot үшін cloudflare плагиніне ұқсас).

Бір қарағанда, үшінші тармақ өте қолайлы, бірақ DNS провайдері бұл функцияны қолдамаса ше? Бірақ бізге жалпы жағдай керек. Жалпы жағдай - CNAME жазбалары, өйткені оларды барлығы қолдайды. Сондықтан біз 2-тармақта тоқтап, ACME-DNS серверін конфигурациялауға барамыз.

ACME-DNS серверін орнату және сертификатты беру процесі

Мысалы, мен 2nd.pp.ua доменін жасадым және оны болашақта қолданамын.

Міндетті талап Сервер дұрыс жұмыс істеуі үшін оның домені үшін NS және A жазбаларын жасау қажет. Мен кездестірген бірінші жағымсыз сәт - бұлттылық (кем дегенде тегін пайдалану режимінде) бір хост үшін бір уақытта 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 серверімде тұрады доккер контейнер, бірақ оны голанг бар кез келген жерде іске қосуға болады. Windows жүйесі де өте қолайлы, бірақ мен әлі де Linux серверін қалаймын.

Қажетті каталогтар мен файлдарды жасаңыз:

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

Сондай-ақ, егер қаласаңыз, біз негізгі қызмет каталогында docker-compose файлын жасаймыз:

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 іске қосыңыз. Бізді сайлау қызықтырады:

  • M: Жаңа сертификат жасау (толық опциялар)
  • 2: Қолмен енгізу
  • 2: [dns-01] acme-dns көмегімен растау жазбаларын жасаңыз (https://github.com/joohoi/acme-dns)
  • ACME-DNS серверіне сілтеме туралы сұрағанда, жауапта жасалған сервердің URL мекенжайын (https) енгізіңіз. acme-dns серверінің URL мекенжайы: 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

пікір қалдыру