SSL verilməsinin avtomatlaşdırılması istiqamətində

Çox vaxt biz SSL sertifikatları ilə işləməliyik. Sertifikatın yaradılması və quraşdırılması prosesini xatırlayaq (ümumi halda, əksər hallarda).

  • Bir provayder tapın (SSL ala biləcəyimiz sayt).
  • KSM yaradın.
  • Onu provayderinizə göndərin.
  • Domen sahibliyini yoxlayın.
  • Sertifikat alın.
  • Sertifikatı tələb olunan formaya çevirin (istəyə görə). Məsələn, pemdən PKCS # 12-ə qədər.
  • Sertifikatı veb serverə quraşdırın.

Nisbətən sürətli, mürəkkəb və başa düşülən deyil. Maksimum on layihəmiz varsa, bu seçim olduqca uyğundur. Bəs onların sayı daha çox olsa və onların ən azı üç mühiti varsa? Klassik inkişaf - səhnələşdirmə - istehsal. Bu halda, bu prosesi avtomatlaşdırmaq barədə düşünməyə dəyər. Problemi bir az daha dərindən araşdırmağı və sertifikatların yaradılması və saxlanmasına sərf olunan vaxtı daha da minimuma endirəcək bir həll tapmağı təklif edirəm. Məqalədə problemin təhlili və təkrarlama üçün kiçik bir bələdçi olacaq.

İcazə verin əvvəlcədən rezervasiya edim: şirkətimizin əsas ixtisası .net və müvafiq olaraq IIS və Windows ilə əlaqəli digər məhsullardır. Buna görə də, ACME müştərisi və onun üçün bütün tədbirlər Windows-dan istifadə baxımından da təsvir ediləcəkdir.

Bu kimə aiddir və bəzi ilkin məlumatlar

Müəllif tərəfindən təmsil olunan K şirkəti. URL (məsələn): company.tld

Layihə X bizim layihələrimizdən biridir, üzərində işləyərkən belə qənaətə gəldim ki, biz hələ də sertifikatlarla işləyərkən maksimum vaxta qənaətə doğru hərəkət etməliyik. Bu layihənin dörd mühiti var: inkişaf, sınaq, səhnələşdirmə və istehsal. İnkişaf və test bizim tərəfimizdədir, quruluş və istehsal müştəri tərəfindədir.

Layihənin özəlliyi ondan ibarətdir ki, onun subdomenlər kimi mövcud olan çoxlu sayda modulları var.

Yəni bizdə aşağıdakı şəkil var:

dev
Sınaq
Staging
istehsal

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
modulN.staging.projectX.tld
moduleN.projectX.tld

İstehsal üçün satın alınmış joker sertifikatdan istifadə olunur, burada heç bir sual yaranmır. Lakin o, yalnız subdomenin birinci səviyyəsini əhatə edir. Müvafiq olaraq, *.projectX.tld üçün sertifikat varsa, o zaman staging.projectX.tld üçün işləyəcək, modul1.staging.projectX.tld üçün deyil. Amma nədənsə ayrıca birini almaq istəmirəm.

Və bu, yalnız bir şirkətin bir layihəsinin nümunəsinə əsaslanır. Və təbii ki, birdən çox layihə var.

Hər kəsin bu problemi həll etməsi üçün ümumi səbəblər belə görünür:

  • Bu yaxınlarda Google SSL sertifikatlarının maksimum etibarlılıq müddətinin azaldılmasını təklif etdi. Bütün nəticələri ilə.
  • Layihələrin və bütövlükdə şirkətin daxili ehtiyacları üçün SSL-nin verilməsi və saxlanması prosesini asanlaşdırmaq.
  • Sertifikat qeydlərinin mərkəzləşdirilmiş saxlanması, DNS-dən istifadə edərək domenin yoxlanılması və sonradan avtomatik yeniləmə problemini qismən həll edir, həmçinin müştəri etibarı məsələsini həll edir. Yenə də partnyor/ifaçı şirkətin serverindəki CNAME üçüncü tərəf resursundan daha etibarlıdır.
  • Yaxşı, nəhayət, bu vəziyyətdə "olmamaqdansa, sahib olmaq yaxşıdır" ifadəsi mükəmməl uyğun gəlir.

SSL Provayderinin seçilməsi və hazırlıq addımları

Pulsuz SSL sertifikatları üçün mövcud variantlar arasında cloudflare və letsencrypt nəzərdən keçirildi. Bunun üçün DNS (və bəzi digər layihələr) cloudflare tərəfindən yerləşdirilir, lakin mən onların sertifikatlarından istifadənin tərəfdarı deyiləm. Buna görə də letsencrypt-dən istifadə etmək qərara alındı.
Wildcard SSL sertifikatı yaratmaq üçün domen sahibliyini təsdiqləməlisiniz. Bu prosedur bəzi DNS qeydlərinin (TXT və ya CNAME) yaradılmasını və sonra sertifikat verərkən onun yoxlanılmasını nəzərdə tutur. Linux-un bir köməkçisi var - sertifikat, bu prosesi qismən (və ya bəzi DNS provayderləri üçün tamamilə) avtomatlaşdırmağa imkan verir. Windows üçün tapılmış və təsdiq edilmişdir Mən qərarlaşdığım ACME müştəri seçimləri WinACME.

Və domen üçün qeyd yaradıldı, gəlin sertifikat yaratmağa keçək:

SSL verilməsinin avtomatlaşdırılması istiqamətində

Son nəticə ilə maraqlanırıq, yəni joker sertifikatın verilməsi üçün domen sahibliyini təsdiqləmək üçün mövcud variantlar:

  1. DNS qeydlərini əl ilə yaradın (avtomatik yeniləmə dəstəklənmir)
  2. acme-dns serverindən istifadə edərək DNS qeydlərinin yaradılması (ətraflı oxuya bilərsiniz burada.
  3. Öz skriptinizdən istifadə edərək DNS qeydlərinin yaradılması (certbot üçün cloudflare plagininə bənzər).

İlk baxışdan üçüncü nöqtə olduqca uyğundur, lakin DNS provayderi bu funksiyanı dəstəkləmirsə nə etməli? Ancaq ümumi bir vəziyyətə ehtiyacımız var. Ancaq ümumi vəziyyət CNAME qeydləridir, çünki hamı onları dəstəkləyir. Buna görə də, 2-ci nöqtədə dayanırıq və ACME-DNS serverimizi konfiqurasiya etməyə gedirik.

ACME-DNS serverinin qurulması və sertifikatın verilməsi prosesi

Məsələn, mən 2nd.pp.ua domenini yaratdım və gələcəkdə ondan istifadə edəcəyəm.

Məcburi tələb Serverin düzgün işləməsi üçün onun domeni üçün NS və A qeydləri yaratmaq lazımdır. Qarşılaşdığım ilk xoşagəlməz məqam odur ki, bulud parıltısı (ən azı pulsuz istifadə rejimində) eyni host üçün eyni vaxtda NS və A rekordu yaratmağa imkan vermir. Bu problem deyil, amma məcburi şəkildə mümkündür. Dəstək cavab verdi ki, onların paneli bunu etməyə icazə vermir. Problem yoxdur, gəlin iki qeyd yaradaq:

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

Bu mərhələdə ev sahibimiz həll etməlidir acmens.2nd.pp.ua.

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

Lakin acme.2nd.pp.ua ona xidmət edən DNS serveri hələ işləmədiyi üçün həll edilməyəcək.

Qeydlər yaradıldı, biz ACME-DNS serverinin qurulmasına və işə salınmasına davam edirik. O, mənim ubuntu serverimdə yaşayacaq docker konteyner, lakin siz onu golang olan hər yerdə işlədə bilərsiniz. Windows da kifayət qədər uyğundur, amma yenə də Linux serverinə üstünlük verirəm.

Lazımi qovluqları və faylları yaradın:

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

Sevimli mətn redaktorunuzla vim-dən istifadə edək və nümunəni config.cfg-ə yapışdıraq konfiqurasiya.

Uğurlu işləmək üçün ümumi və api bölmələrini düzəltmək kifayətdir:

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

Həmçinin, istəsək, əsas xidmət kataloqunda docker-compose faylı yaradacağıq:

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

Hazır. Siz idarə edə bilərsiniz.

$ docker-compose up -d

Bu mərhələdə ev sahibi həll etməyə başlamalıdır acme.2nd.pp.uavə 404 işarəsi görünür 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

Bu görünməzsə - docker logs -f <container_name> kömək etmək üçün, xoşbəxtlikdən, loglar olduqca oxunaqlıdır.

Sertifikat yaratmağa başlaya bilərik. Powershell-i administrator olaraq açın və winacme-i işə salın. Seçkilərlə maraqlanırıq:

  • M: Yeni sertifikat yaradın (tam seçimlər)
  • 2: Əllə daxiletmə
  • 2: [dns-01] Acme-dns ilə yoxlama qeydləri yaradın (https://github.com/joohoi/acme-dns)
  • ACME-DNS serverinə keçid haqqında soruşduqda cavabda yaradılmış serverin URL-ni (https) daxil edin. acme-dns serverinin URL-i: https://acme.2nd.pp.ua

Açılışda müştəri mövcud DNS serverinə əlavə edilməli olan bir qeyd verir (birdəfəlik prosedur):

[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 verilməsinin avtomatlaşdırılması istiqamətində

Lazımi qeydi yaradırıq və onun düzgün yaradıldığından əmin oluruq:

SSL verilməsinin avtomatlaşdırılması istiqamətində

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

Winacme-də tələb olunan girişi yaratdığımızı təsdiqləyirik və sertifikat yaratma prosesini davam etdiririk:

SSL verilməsinin avtomatlaşdırılması istiqamətində

Müştəri kimi certbotdan necə istifadə olunacağı təsvir edilmişdir burada.

Bu, sertifikatın yaradılması prosesini tamamlayır, onu veb serverə quraşdırıb istifadə edə bilərsiniz. Sertifikat yaratarkən, planlaşdırıcıda bir tapşırıq yaratsanız, gələcəkdə sertifikatın yenilənməsi prosesi avtomatik olaraq baş verəcəkdir.

Mənbə: www.habr.com

Добавить комментарий