SSL чыгарууну автоматташтырууга карай

Көбүнчө биз SSL сертификаттары менен иштешибиз керек. Келгиле, күбөлүк түзүү жана орнотуу процессин эстеп көрөлү (көпчүлүк үчүн жалпы учурда).

  • Провайдерди табыңыз (SSL сатып ала турган сайт).
  • CSR түзүү.
  • Провайдериңизге жөнөтүңүз.
  • Доменге ээлик кылууну ырастаңыз.
  • Сертификат алыңыз.
  • Сертификатты керектүү формага которуңуз (милдеттүү эмес). Мисалы, пемден PKCS №12ге чейин.
  • Сертификатты веб серверге орнотуңуз.

Салыштырмалуу тез, татаал жана түшүнүктүү эмес. Эгерде бизде эң көп он долбоор болсо, бул вариант абдан ылайыктуу. Эгер алар көп болсо, жана алардын жок дегенде үч чөйрөсү болсочы? Классикалык иштеп чыгуу - сахналаштыруу - өндүрүш. Бул учурда, бул процессти автоматташтыруу жөнүндө ойлонуу керек. Мен көйгөйдү бир аз тереңирээк изилдеп, сертификаттарды түзүүгө жана сактоого кеткен убакытты андан ары азайта турган чечимди табууну сунуштайм. Макалада маселенин талдоо жана кайталоо үчүн чакан колдонмо камтылат.

Мага алдын ала ээлеп коюуга уруксат этиңиз: биздин компаниянын негизги адистиги - .net, жана, ошого жараша, IIS жана башка Windows менен байланышкан өнүмдөр. Ошондуктан, ACME кардары жана ал үчүн бардык иш-аракеттер Windows колдонуу көз карашынан да сүрөттөлөт.

Бул кимге тиешелүү жана кээ бир баштапкы маалыматтар

К компаниясы автор тарабынан көрсөтүлгөн. URL (мисалы): company.tld

X долбоору - бул биздин долбоорлордун бири, анын үстүндө иштеп жатып, биз дагы эле сертификаттар менен иштөөдө убакытты максималдуу үнөмдөөгө өтүшүбүз керек деген тыянакка келдим. Бул долбоордун төрт чөйрөсү бар: иштеп чыгуу, сыноо, сахналаштыруу жана өндүрүш. Dev жана тест биз тарапта, сахналаштыруу жана өндүрүш кардар тарапта.

Долбоордун өзгөчөлүгү субдомендер катары жеткиликтүү болгон көп сандагы модулдарга ээ.

Башкача айтканда, биз төмөнкү сүрөт бар:

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тун утилитасы бар - certbotБул процессти жарым-жартылай (же кээ бир 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 жазууларын түзүү керек. Жана мен биринчи жолуккан жагымсыз учур бул 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 серверимде жашайт ютуб контейнер, бирок сиз аны голанг бар жерде иштете аласыз. 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"
…

Ошондой эле, эгер кааласа, биз негизги кызмат каталогунда докер-түзүүчү файлды түзөбүз:

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 кантип колдонуу керектиги сүрөттөлгөн бул жерде.

Бул сертификат түзүү процессин аяктайт; сиз аны веб-серверге орнотуп, аны колдоно аласыз. Эгер күбөлүк түзүүдө сиз пландоочуда тапшырма түзсөңүз, анда келечекте сертификатты жаңылоо процесси автоматтык түрдө ишке ашат.

Source: www.habr.com

Комментарий кошуу