SSL verilmesinin otomasyonuna doğru

Çoğu zaman SSL sertifikalarıyla çalışmak zorunda kalıyoruz. Sertifika oluşturma ve yükleme sürecini hatırlayalım (genel durumda çoğu için).

  • Bir sağlayıcı bulun (SSL satın alabileceğimiz bir site).
  • KSS oluşturun.
  • Sağlayıcınıza gönderin.
  • Etki alanı sahipliğini doğrulayın.
  • Sertifika almak.
  • Sertifikayı gerekli forma dönüştürün (isteğe bağlı). Örneğin pem'den PKCS #12'ye.
  • Sertifikayı web sunucusuna yükleyin.

Nispeten hızlı, karmaşık değil ve anlaşılır. Maksimum on projemiz varsa bu seçenek oldukça uygundur. Ya onlardan daha fazla varsa ve en az üç ortamları varsa? Klasik geliştirme - sahneleme - prodüksiyon. Bu durumda bu süreci otomatikleştirmeyi düşünmeye değer. Sorunu biraz daha derinlemesine incelemeyi ve sertifikaların oluşturulması ve bakımı için harcanan zamanı daha da azaltacak bir çözüm bulmayı öneriyorum. Makale, sorunun bir analizini ve tekrarlama için küçük bir kılavuzu içerecektir.

Önceden rezervasyon yapayım: Şirketimizin ana uzmanlığı .net ve buna bağlı olarak IIS ve Windows ile ilgili diğer ürünlerdir. Bu nedenle, ACME istemcisi ve ona yönelik tüm eylemler aynı zamanda Windows kullanımı açısından da açıklanacaktır.

Bu kimin için önemlidir ve bazı başlangıç ​​verileri

Yazar tarafından temsil edilen K şirketi. URL (örneğin): şirket.tld

Proje X, üzerinde çalışırken sertifikalarla çalışırken hâlâ maksimum zaman tasarrufuna doğru ilerlememiz gerektiği sonucuna vardığım projelerimizden biri. Bu projenin dört ortamı vardır: geliştirme, test, hazırlama ve üretim. Geliştirme ve test bizim tarafımızda, hazırlama ve üretim müşteri tarafındadır.

Projenin bir özelliği de alt alan adı olarak kullanılabilen çok sayıda modüle sahip olmasıdır.

Yani, aşağıdaki resme sahibiz:

dev
test
Sahneleme
üretim

projeX.dev.company.tld
projeX.test.company.tld
evreleme.projeX.tld
projeX.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
modülN.projectX.tld

Üretim için satın alınan bir joker karakter sertifikası kullanılıyor, burada hiçbir soru ortaya çıkmıyor. Ancak alt alan adının yalnızca ilk düzeyini kapsar. Buna göre, *.projectX.tld için bir sertifika varsa, o zaman staging.projectX.tld için çalışır, ancak module1.staging.projectX.tld için çalışmaz. Ama nedense ayrı bir tane almak istemiyorum.

Ve bu sadece bir şirketin tek bir projesi örneğine dayanmaktadır. Ve elbette birden fazla proje var.

Herkesin bu sorunu ele almasının ortak nedenleri şuna benzer:

  • Son zamanlarda Google, SSL sertifikalarının maksimum geçerlilik süresinin azaltılmasını önerdi. Tüm sonuçlarıyla birlikte.
  • Projelerin ve bir bütün olarak şirketin dahili ihtiyaçları için SSL verme ve sürdürme sürecini kolaylaştırın.
  • DNS kullanarak etki alanı doğrulama sorununu ve ardından otomatik yenilemeyi kısmen çözen ve aynı zamanda müşteri güveni sorununu da çözen sertifika kayıtlarının merkezi olarak depolanması. Yine de bir iş ortağının/sanatçı şirketin sunucusundaki bir CNAME, üçüncü taraf bir kaynaktan daha güvenilirdir.
  • Son olarak, bu durumda "Sahip olmak, sahip olmamaktan iyidir" ifadesi mükemmel bir şekilde uyuyor.

SSL Sağlayıcı Seçimi ve Hazırlık Adımları

Ücretsiz SSL sertifikaları için mevcut seçenekler arasında cloudflare ve letsencrypt dikkate alındı. Bunun (ve diğer bazı projelerin) DNS'si cloudflare tarafından barındırılıyor, ancak sertifikalarını kullanmanın hayranı değilim. Bu nedenle letsencrypt kullanılmasına karar verildi.
Joker karakterli SSL sertifikası oluşturmak için alan adı sahipliğini onaylamanız gerekir. Bu prosedür, bir miktar DNS kaydı (TXT veya CNAME) oluşturmayı ve ardından bir sertifika verirken bu kaydın doğrulanmasını içerir. Linux'un bir yardımcı programı var - CertbotBu, bu işlemi kısmen (veya bazı DNS sağlayıcıları için tamamen) otomatikleştirmenize olanak tanır. Windows için bulundu ve doğrulandı Kararlaştırdığım ACME istemci seçenekleri WinACME.

Ve alan adına ait kayıt oluşturuldu, sertifika oluşturmaya geçelim:

SSL verilmesinin otomasyonuna doğru

Son sonuçla, yani joker karakter sertifikası vermek için alan adı sahipliğini onaylamaya yönelik mevcut seçeneklerle ilgileniyoruz:

  1. DNS kayıtlarını manuel olarak oluşturun (otomatik güncelleme desteklenmez)
  2. Acme-dns sunucusunu kullanarak DNS kayıtları oluşturma (hakkında daha fazlasını okuyabilirsiniz) burada.
  3. Kendi betiğinizi kullanarak DNS kayıtları oluşturma (certbot için cloudflare eklentisine benzer).

İlk bakışta üçüncü nokta oldukça uygundur, ancak ya DNS sağlayıcısı bu işlevi desteklemiyorsa? Ama genel bir duruma ihtiyacımız var. Ancak genel durum CNAME kayıtlarıdır, çünkü herkes onları destekler. Bu nedenle 2. noktada durup ACME-DNS sunucumuzu yapılandırmaya geçiyoruz.

ACME-DNS sunucusunun kurulması ve sertifika verme süreci

Örneğin 2nd.pp.ua alan adını oluşturdum ve gelecekte kullanacağım.

Zorunlu ihtiyaç Sunucunun düzgün çalışabilmesi için kendi domainine ait NS ve A kayıtlarının oluşturulması gerekmektedir. Ve karşılaştığım ilk hoş olmayan an, cloudflare'in (en azından ücretsiz kullanım modunda) aynı ana bilgisayar için aynı anda bir NS ve A kaydı oluşturmanıza izin vermemesidir. Bu bir sorun değil ama bağlamada mümkün. Destek, panellerinin buna izin vermediğini söyledi. Sorun değil, iki kayıt oluşturalım:

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

Bu aşamada ev sahibimizin çözmesi gerekiyor acmens.2nd.pp.ua.

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

ve burada acme.2nd.pp.ua Kendisine hizmet veren DNS sunucusu henüz çalışmadığından çözümlenmeyecektir.

Kayıtlar oluşturuldu, ACME-DNS sunucusunu kurup başlatmaya devam ediyoruz. Ubuntu sunucumda yaşayacak liman işçisi konteyner, ancak golang'ın mevcut olduğu her yerde çalıştırabilirsiniz. Windows da oldukça uygun ama ben yine de Linux sunucusunu tercih ediyorum.

Gerekli dizinleri ve dosyaları oluşturun:

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

Vim'i favori metin düzenleyicinizle kullanalım ve örneği config.cfg'ye yapıştıralım yapılandırma.

Başarılı bir çalışma için genel ve api bölümlerini düzeltmek yeterlidir:

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

Ayrıca istenirse ana hizmet dizininde bir docker-compose dosyası oluşturacağız:

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. Çalıştırabilirsin.

$ docker-compose up -d

Bu aşamada ev sahibi çözümlemeye başlamalıdır. acme.2nd.pp.uave ekranda 404 görünüyor 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üyorsa - docker logs -f <container_name> yardımcı olmak için, neyse ki günlükler oldukça okunabilir.

Sertifikayı oluşturmaya başlayabiliriz. Powershell'i yönetici olarak açın ve winacme'yi çalıştırın. Seçimlerle ilgileniyoruz:

  • M: Yeni sertifika oluştur (tam seçenekler)
  • 2:Manuel giriş
  • 2: [dns-01] acme-dns ile doğrulama kayıtları oluşturun (https://github.com/joohoi/acme-dns)
  • ACME-DNS sunucusuna bir bağlantı sorulduğunda yanıta oluşturulan sunucunun URL'sini (https) girin. acme-dns sunucusunun URL'si: https://acme.2nd.pp.ua

Açılışta istemci, mevcut DNS sunucusuna eklenmesi gereken bir kayıt yayınlar (tek seferlik prosedür):

[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 verilmesinin otomasyonuna doğru

Gerekli kaydı oluşturuyoruz ve doğru oluşturulduğundan emin oluyoruz:

SSL verilmesinin otomasyonuna doğru

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

Winacme'de gerekli girişi oluşturduğumuzu onaylıyoruz ve sertifika oluşturma işlemine devam ediyoruz:

SSL verilmesinin otomasyonuna doğru

Certbot'un istemci olarak nasıl kullanılacağı anlatılıyor burada.

Bu, sertifika oluşturma işlemini tamamlar; sertifikayı web sunucusuna yükleyebilir ve kullanabilirsiniz. Bir sertifika oluştururken zamanlayıcıda da bir görev oluşturursanız, gelecekte sertifika yenileme işlemi otomatik olarak gerçekleşecektir.

Kaynak: habr.com

Yorum ekle