SSL олголтыг автоматжуулах чиглэлд

Ихэнхдээ бид SSL сертификаттай ажиллах шаардлагатай болдог. Сертификат үүсгэх, суулгах үйл явцыг санацгаая (ихэнх тохиолдолд ерөнхийдөө).

  • Үйлчилгээ үзүүлэгч хайж олох (бидний SSL худалдан авах боломжтой сайт).
  • CSR үүсгэх.
  • Үүнийг үйлчилгээ үзүүлэгчдээ илгээнэ үү.
  • Домэйн эзэмшлийг баталгаажуулна уу.
  • Сертификат авах.
  • Сертификатыг шаардлагатай маягт руу хөрвүүлэх (заавал биш). Жишээлбэл, pem-ээс PKCS # 12 хүртэл.
  • Сертификатыг вэб сервер дээр суулгана уу.

Харьцангуй хурдан, төвөгтэй биш, ойлгомжтой. Хэрэв бид дээд тал нь арван төсөлтэй бол энэ сонголт маш тохиромжтой. Хэрэв тэд илүү олон байвал, тэд дор хаяж гурван орчинтой бол яах вэ? Сонгодог dev - тайз - үйлдвэрлэл. Энэ тохиолдолд энэ үйл явцыг автоматжуулах талаар бодох нь зүйтэй. Би асуудлыг бага зэрэг гүнзгийрүүлж, гэрчилгээ үүсгэх, хадгалахад зарцуулсан цаг хугацааг багасгах шийдлийг олохыг санал болгож байна. Нийтлэл нь асуудлын дүн шинжилгээ, давталтын жижиг гарын авлагыг агуулсан болно.

Урьдчилан захиалгаа өгье: манай компанийн гол мэргэжил бол .net, үүний дагуу IIS болон Windows-тэй холбоотой бусад бүтээгдэхүүн юм. Тиймээс ACME клиент болон түүнд зориулсан бүх үйлдлийг Windows ашиглах үүднээс тайлбарлах болно.

Энэ нь хэнд хамаатай вэ, зарим анхны мэдээлэл

К компанийг зохиогч төлөөлдөг. URL (жишээ нь): company.tld

Төсөл X бол манай төслүүдийн нэг бөгөөд би ажиллаж байхдаа бид гэрчилгээтэй ажиллахдаа хамгийн их цаг хэмнэх чиглэлд шилжих шаардлагатай байна гэсэн дүгнэлтэд хүрсэн. Энэхүү төсөл нь боловсруулах, туршилт, үе шат, үйлдвэрлэл гэсэн дөрвөн орчинтой. Хөгжүүлэлт, тест нь бидний талд, найруулга, үйлдвэрлэл нь үйлчлүүлэгчийн талд байна.

Төслийн онцлог нь дэд домайн хэлбэрээр ашиглах боломжтой олон тооны модультай байдаг.

Энэ нь бидэнд дараах зураг байна.

Дев
туршилтын
Тоглолт
Үйлдвэрлэл

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) үүсгэж, дараа нь гэрчилгээ олгохдоо баталгаажуулна. Линукс нь хэрэгсэлтэй - сертификат, энэ нь танд энэ үйл явцыг хэсэгчлэн (эсвэл зарим 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 нь бас тохиромжтой, гэхдээ би Линукс серверийг илүүд үздэг хэвээр байна.

Шаардлагатай лавлах болон файлуудыг үүсгэ:

$ 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-г ажиллуул. Бид сонгуулийг сонирхож байна:

  • М: Шинэ гэрчилгээ үүсгэх (бүрэн сонголтууд)
  • 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 олголтыг автоматжуулах чиглэлд

Сертботыг үйлчлүүлэгч болгон хэрхэн ашиглах талаар тайлбарласан энд.

Энэ нь гэрчилгээ үүсгэх процессыг дуусгах бөгөөд та үүнийг вэб сервер дээр суулгаж, ашиглах боломжтой. Хэрэв та гэрчилгээ үүсгэх үед хуваарь гаргагч дээр ажил үүсгэсэн бол ирээдүйд гэрчилгээг шинэчлэх үйл явц автоматаар хийгдэх болно.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх