SSL emissiyasini avtomatlashtirishga

Ko'pincha biz SSL sertifikatlari bilan ishlashimiz kerak. Keling, sertifikat yaratish va o'rnatish jarayonini eslaylik (ko'pchilik uchun umumiy holatda).

  • Provayderni toping (SSL sotib olishimiz mumkin bo'lgan sayt).
  • CSR yaratish.
  • Uni provayderingizga yuboring.
  • Domen egaligini tasdiqlang.
  • Sertifikat oling.
  • Sertifikatni kerakli shaklga o'zgartiring (ixtiyoriy). Misol uchun, pemdan PKCS # 12 ga.
  • Sertifikatni veb-serverga o'rnating.

Nisbatan tez, murakkab va tushunarli emas. Agar bizda ko'pi bilan o'nta loyiha bo'lsa, bu variant juda mos keladi. Agar ular ko'proq bo'lsa va ular kamida uchta muhitga ega bo'lsa-chi? Klassik ishlab chiqarish - sahnalashtirish - ishlab chiqarish. Bunday holda, ushbu jarayonni avtomatlashtirish haqida o'ylash arziydi. Men muammoni biroz chuqurroq o'rganishni va sertifikatlarni yaratish va saqlashga sarflanadigan vaqtni yanada kamaytiradigan yechim topishni taklif qilaman. Maqolada muammoning tahlili va takrorlash bo'yicha kichik qo'llanma mavjud.

Oldindan band qilishimga ijozat bering: kompaniyamizning asosiy ixtisosligi .net va shunga mos ravishda IIS va Windows bilan bog'liq boshqa mahsulotlar. Shuning uchun, ACME mijozi va uning uchun barcha harakatlar Windows-dan foydalanish nuqtai nazaridan ham tavsiflanadi.

Bu kimga tegishli va ba'zi dastlabki ma'lumotlar

K kompaniyasi muallif tomonidan taqdim etilgan. URL (masalan): company.tld

X loyihasi - bu bizning loyihalarimizdan biri bo'lib, u ustida ishlayotganda men sertifikatlar bilan ishlashda hali ham vaqtni tejashga o'tishimiz kerak degan xulosaga keldim. Ushbu loyiha to'rtta muhitga ega: ishlab chiqish, sinov, sahnalashtirish va ishlab chiqarish. Dev va test biz tomonda, sahnalashtirish va ishlab chiqarish mijoz tomonida.

Loyihaning o'ziga xos xususiyati shundaki, u subdomenlar sifatida mavjud bo'lgan ko'p sonli modullarga ega.

Ya'ni, bizda quyidagi rasm bor:

dev
sinov
Staging
ishlab chiqarish

projectX.dev.company.tld
projectX.test.company.tld
staging.projectX.tld
projectX.tld

modul1.projectX.dev.company.tld
modul1.projectX.test.company.tld
modul1.staging.projectX.tld
modul1.projectX.tld

modul2.projectX.dev.company.tld
modul2.projectX.test.company.tld
modul2.staging.projectX.tld
modul2.projectX.tld

...
...
...
...

moduleN.projectX.dev.company.tld
moduleN.projectX.test.company.tld
moduleN.staging.projectX.tld
moduleN.projectX.tld

Ishlab chiqarish uchun sotib olingan joker sertifikat ishlatiladi, bu erda hech qanday savol tug'ilmaydi. Lekin u faqat subdomenning birinchi darajasini qamrab oladi. Shunga ko'ra, agar *.projectX.tld uchun sertifikat mavjud bo'lsa, u staging.projectX.tld uchun ishlaydi, lekin modul1.staging.projectX.tld uchun emas. Lekin qandaydir tarzda men alohida sotib olmoqchi emasman.

Va bu faqat bitta kompaniyaning bitta loyihasi misoliga asoslanadi. Va, albatta, bir nechta loyiha mavjud.

Bu muammoni hal qilish uchun hamma uchun umumiy sabablar quyidagicha ko'rinadi:

  • Yaqinda Google SSL sertifikatlarining maksimal amal qilish muddatini qisqartirishni taklif qildi. Barcha oqibatlari bilan.
  • Loyihalarning va umuman kompaniyaning ichki ehtiyojlari uchun SSLni chiqarish va saqlash jarayonini osonlashtirish.
  • Sertifikat yozuvlarini markazlashtirilgan saqlash, bu DNS-dan foydalangan holda domenni tekshirish va keyinchalik avtomatik yangilash muammosini qisman hal qiladi, shuningdek, mijozning ishonchi masalasini hal qiladi. Shunga qaramay, sherik/ijrochi kompaniya serveridagi CNAME uchinchi tomon manbasiga qaraganda ishonchliroq.
  • Xo'sh, nihoyat, bu holatda "bo'lmagandan ko'ra ega bo'lgani yaxshi" iborasi juda mos keladi.

SSL provayderini tanlash va tayyorgarlik bosqichlari

Bepul SSL sertifikatlarining mavjud variantlari orasida cloudflare va letsencrypt ko'rib chiqildi. Buning uchun DNS (va ba'zi boshqa loyihalar) cloudflare tomonidan joylashtirilgan, ammo men ularning sertifikatlaridan foydalanishni yoqtirmayman. Shuning uchun letsencryptdan foydalanishga qaror qilindi.
Joker SSL sertifikatini yaratish uchun siz domen egaligini tasdiqlashingiz kerak. Ushbu protsedura ba'zi DNS yozuvlarini (TXT yoki CNAME) yaratish va sertifikat berishda uni tekshirishni o'z ichiga oladi. Linuxda yordamchi dastur mavjud - sertifikat, bu sizga ushbu jarayonni qisman (yoki ba'zi DNS provayderlari uchun to'liq) avtomatlashtirish imkonini beradi. Windows uchun topildi va tasdiqlandi Men hal qilgan ACME mijoz variantlari WinACME.

Va domen uchun rekord yaratildi, sertifikat yaratishga o'tamiz:

SSL emissiyasini avtomatlashtirishga

Bizni oxirgi xulosa qiziqtiradi, ya'ni joker belgilar sertifikatini berish uchun domen egaligini tasdiqlashning mavjud variantlari:

  1. DNS yozuvlarini qo'lda yaratish (avtomatik yangilash qo'llab-quvvatlanmaydi)
  2. Acme-dns server yordamida DNS yozuvlarini yaratish (bu haqida ko'proq o'qishingiz mumkin shu yerda.
  3. O'z skriptingiz yordamida DNS yozuvlarini yaratish (certbot uchun cloudflare plaginiga o'xshash).

Bir qarashda, uchinchi nuqta juda mos keladi, ammo agar DNS provayderi ushbu funktsiyani qo'llab-quvvatlamasa nima bo'ladi? Ammo bizga umumiy holat kerak. Ammo umumiy holat CNAME yozuvlaridir, chunki hamma ularni qo'llab-quvvatlaydi. Shuning uchun biz 2-bandda to'xtab, ACME-DNS serverimizni sozlashga o'tamiz.

ACME-DNS serverini sozlash va sertifikat berish jarayoni

Masalan, men 2nd.pp.ua domenini yaratdim va kelajakda undan foydalanaman.

Majburiy talab Serverning to'g'ri ishlashi uchun uning domeni uchun NS va A yozuvlarini yaratish kerak. Va men duch kelgan birinchi noxush lahza shundaki, bulutlar (hech bo'lmaganda bepul foydalanish rejimida) bir vaqtning o'zida bir xil xost uchun NS va A yozuvlarini yaratishga imkon bermaydi. Bu muammo emas, lekin bog'langan holda bu mumkin. Qo'llab-quvvatlash, ularning paneli buni qilishga ruxsat bermasligini aytdi. Muammo yo'q, keling ikkita yozuv yarataylik:

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

Ushbu bosqichda bizning uy egasi hal qilishi kerak acmens.2nd.pp.ua.

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

Ammo acme.2nd.pp.ua u hal etilmaydi, chunki unga xizmat ko'rsatadigan DNS server hali ishlamayapti.

Yozuvlar yaratildi, keling, ACME-DNS serverini sozlash va ishga tushirishga o'tamiz. U mening ubuntu serverimda yashaydi docker konteyner, lekin uni golang mavjud bo'lgan har qanday joyda ishlatishingiz mumkin. Windows ham juda mos keladi, lekin men hali ham Linux serverini afzal ko'raman.

Kerakli katalog va fayllarni yarating:

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

Sevimli matn muharriringiz bilan vim dan foydalanamiz va namunani config.cfg ichiga joylaymiz konfiguratsiya.

Muvaffaqiyatli ishlash uchun umumiy va api bo'limlarini tuzatish kifoya:

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

Bundan tashqari, agar xohlasangiz, biz asosiy xizmat katalogida docker-compose faylini yaratamiz:

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

Tayyor. Siz uni ishga tushirishingiz mumkin.

$ docker-compose up -d

Ushbu bosqichda uy egasi hal qilishni boshlashi kerak acme.2nd.pp.ua, va 404 belgisi paydo bo'ladi 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

Agar bu ko'rinmasa - docker logs -f <container_name> yordam berish uchun, xayriyatki, jurnallar juda o'qilishi mumkin.

Biz sertifikat yaratishni boshlashimiz mumkin. Powershell-ni administrator sifatida oching va winacme-ni ishga tushiring. Bizni saylovlar qiziqtiradi:

  • M: Yangi sertifikat yaratish (to'liq variantlar)
  • 2: qo'lda kiritish
  • 2: [dns-01] Acme-dns bilan tekshirish yozuvlarini yarating (https://github.com/joohoi/acme-dns)
  • ACME-DNS serveriga havola haqida so'ralganda, javobda yaratilgan serverning URL manzilini (https) kiriting. acme-dns serverining URL manzili: https://acme.2nd.pp.ua

Ochilishda mijoz mavjud DNS serveriga qo'shilishi kerak bo'lgan yozuvni chiqaradi (bir martalik protsedura):

[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 emissiyasini avtomatlashtirishga

Biz kerakli yozuvni yaratamiz va uning to'g'ri tuzilganligiga ishonch hosil qilamiz:

SSL emissiyasini avtomatlashtirishga

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

Biz winacme-da kerakli yozuvni yaratganimizni tasdiqlaymiz va sertifikat yaratish jarayonini davom ettiramiz:

SSL emissiyasini avtomatlashtirishga

Mijoz sifatida certbotdan qanday foydalanish tasvirlangan shu yerda.

Bu sertifikat yaratish jarayonini yakunlaydi, uni veb-serverga o'rnatishingiz va undan foydalanishingiz mumkin. Agar sertifikat yaratishda siz rejalashtiruvchida vazifa yaratsangiz, kelajakda sertifikatni yangilash jarayoni avtomatik ravishda amalga oshiriladi.

Manba: www.habr.com

a Izoh qo'shish