Menuju otomatisasi penerbitan SSL

Seringkali kita harus bekerja dengan sertifikat SSL. Mari kita ingat proses pembuatan dan pemasangan sertifikat (umumnya sebagian besar).

  • Temukan penyedianya (situs tempat kita bisa membeli SSL).
  • Menghasilkan CSR.
  • Kirimkan ke penyedia Anda.
  • Verifikasi kepemilikan domain.
  • Dapatkan sertifikat.
  • Konversikan sertifikat ke formulir yang diperlukan (opsional). Misalnya dari pem ke PKCS #12.
  • Instal sertifikat di server web.

Relatif cepat, tidak ribet dan mudah dimengerti. Opsi ini cukup cocok jika kita memiliki maksimal sepuluh proyek. Bagaimana jika jumlahnya lebih banyak, dan mereka memiliki setidaknya tiga lingkungan? Pengembang klasik - pementasan - produksi. Dalam hal ini, ada baiknya memikirkan untuk mengotomatiskan proses ini. Saya mengusulkan untuk mempelajari masalah ini lebih dalam dan menemukan solusi yang selanjutnya akan meminimalkan waktu yang dihabiskan untuk membuat dan memelihara sertifikat. Artikel ini akan berisi analisis masalah dan panduan kecil untuk pengulangan.

Izinkan saya melakukan reservasi terlebih dahulu: spesialisasi utama perusahaan kami adalah .net, dan karenanya, IIS dan produk terkait Windows lainnya. Oleh karena itu, klien ACME dan semua tindakannya juga akan dijelaskan dari sudut pandang penggunaan Windows.

Untuk siapa ini relevan dan beberapa data awal

Perusahaan K diwakili oleh penulis. URL (misalnya): perusahaan.tld

Proyek X adalah salah satu proyek kami, saat mengerjakannya saya sampai pada kesimpulan bahwa kami masih perlu beralih ke penghematan waktu maksimum saat bekerja dengan sertifikat. Proyek ini memiliki empat lingkungan: pengembangan, pengujian, pementasan, dan produksi. Pengembangan dan pengujian ada di pihak kami, pementasan dan produksi ada di sisi klien.

Fitur khusus dari proyek ini adalah ia memiliki sejumlah besar modul yang tersedia sebagai subdomain.

Artinya, kita memiliki gambar berikut:

dev
uji
Pementasan
Produksi

proyekX.dev.perusahaan.tld
proyekX.test.perusahaan.tld
pementasan.projectX.tld
proyekX.tld

module1.projectX.dev.perusahaan.tld
module1.projectX.test.perusahaan.tld
modul1.staging.projectX.tld
modul1.projectX.tld

module2.projectX.dev.perusahaan.tld
module2.projectX.test.perusahaan.tld
modul2.staging.projectX.tld
modul2.projectX.tld

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

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

Untuk produksi, sertifikat wildcard yang dibeli digunakan, tidak ada pertanyaan yang muncul di sini. Tapi itu hanya mencakup subdomain tingkat pertama. Oleh karena itu, jika ada sertifikat untuk *.projectX.tld, maka sertifikat tersebut akan berfungsi untuk staging.projectX.tld, tetapi tidak untuk module1.staging.projectX.tld. Tapi entah kenapa saya tidak mau beli yang terpisah.

Dan ini hanya berdasarkan contoh satu proyek dari satu perusahaan. Dan tentu saja ada lebih dari satu proyek.

Alasan umum bagi setiap orang untuk mengatasi masalah ini terlihat seperti ini:

  • ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΅Π΄Π°Π²Π½ΠΎ Google mengusulkan pengurangan masa berlaku maksimum sertifikat SSL. Dengan segala konsekuensinya.
  • Memfasilitasi proses penerbitan dan pemeliharaan SSL untuk kebutuhan internal proyek dan perusahaan secara keseluruhan.
  • Penyimpanan terpusat dari catatan sertifikat, yang sebagian memecahkan masalah verifikasi domain menggunakan DNS dan pembaruan otomatis berikutnya, dan juga memecahkan masalah kepercayaan klien. Namun, CNAME di server perusahaan mitra/pemain lebih dapat dipercaya dibandingkan pada sumber daya pihak ketiga.
  • Dan akhirnya, dalam hal ini ungkapan β€œlebih baik memiliki daripada tidak memiliki” sangat cocok.

Memilih Penyedia SSL dan Langkah Persiapannya

Di antara opsi yang tersedia untuk sertifikat SSL gratis, cloudflare dan letsencrypt telah dipertimbangkan. DNS untuk ini (dan beberapa proyek lainnya) dihosting oleh cloudflare, tapi saya bukan penggemar menggunakan sertifikat mereka. Oleh karena itu, diputuskan untuk menggunakan letsencrypt.
Untuk membuat sertifikat SSL wildcard, Anda perlu mengonfirmasi kepemilikan domain. Prosedur ini melibatkan pembuatan beberapa data DNS (TXT atau CNAME), dan kemudian memverifikasinya saat menerbitkan sertifikat. Linux memiliki utilitas - certbot, yang memungkinkan Anda mengotomatiskan sebagian (atau seluruhnya untuk beberapa penyedia DNS) proses ini. Untuk Windows dari ditemukan dan diverifikasi Opsi klien ACME yang saya pilih WinACME.

Dan record untuk domain telah dibuat, mari kita lanjutkan ke pembuatan sertifikat:

Menuju otomatisasi penerbitan SSL

Kami tertarik dengan kesimpulan terakhir, yaitu opsi yang tersedia untuk mengonfirmasi kepemilikan domain untuk menerbitkan sertifikat wildcard:

  1. Buat catatan DNS secara manual (pembaruan otomatis tidak didukung)
  2. Membuat catatan DNS menggunakan server acme-dns (Anda dapat membaca lebih lanjut di sini.
  3. Membuat catatan DNS menggunakan skrip Anda sendiri (mirip dengan plugin cloudflare untuk certbot).

Sekilas poin ketiga cukup cocok, namun bagaimana jika penyedia DNS tidak mendukung fungsi ini? Tapi kita perlu kasus umum. Dan kasus umumnya adalah data CNAME, karena semua orang mendukungnya. Oleh karena itu, kami berhenti di poin 2 dan melanjutkan untuk mengkonfigurasi server ACME-DNS kami.

Menyiapkan server ACME-DNS dan proses penerbitan sertifikat

Misalnya, saya membuat domain 2nd.pp.ua dan akan menggunakannya di masa mendatang.

Persyaratan wajib Agar server berfungsi dengan benar, perlu membuat catatan NS dan A untuk domainnya. Dan momen tidak menyenangkan pertama yang saya temui adalah cloudflare (setidaknya dalam mode penggunaan gratis) tidak memungkinkan Anda membuat catatan NS dan A secara bersamaan untuk host yang sama. Bukan berarti ini masalah, tapi dalam keadaan terikat itu mungkin terjadi. Dukungan tersebut menjawab bahwa panel mereka tidak mengizinkan melakukan hal ini. Tidak masalah, mari buat dua catatan:

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

Pada tahap ini, tuan rumah kita harus menyelesaikannya acmens.2nd.pp.ua.

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

Tetapi acme.2nd.pp.ua itu tidak akan teratasi, karena server DNS yang melayaninya belum berjalan.

Catatan telah dibuat, kami melanjutkan untuk menyiapkan dan meluncurkan server ACME-DNS. Itu akan tinggal di server ubuntu saya buruh pelabuhan container, tetapi Anda dapat menjalankannya di mana pun golang tersedia. Windows juga cukup cocok, tapi saya tetap lebih memilih server Linux.

Buat direktori dan file yang diperlukan:

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

Mari gunakan vim dengan editor teks favorit Anda dan tempelkan sampelnya ke config.cfg konfigurasi.

Agar pengoperasian berhasil, cukup dengan memperbaiki bagian umum dan 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"
…

Selain itu, jika diinginkan, kami akan membuat file komposisi buruh pelabuhan di direktori layanan utama:

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

Siap. Anda dapat menjalankannya.

$ docker-compose up -d

Pada tahap ini tuan rumah harus mulai menyelesaikan masalah acme.2nd.pp.ua, dan 404 muncul 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

Jika ini tidak muncul - docker logs -f <container_name> untuk membantu, untungnya, lognya cukup mudah dibaca.

Kita bisa mulai membuat sertifikat. Buka PowerShell sebagai administrator dan jalankan winacme. Kami tertarik dengan pemilu:

  • M: Buat sertifikat baru (opsi lengkap)
  • 2: Masukan manual
  • 2: [dns-01] Buat catatan verifikasi dengan acme-dns (https://github.com/joohoi/acme-dns)
  • Saat ditanya tentang link ke server ACME-DNS, masukkan URL server yang dibuat (https) di jawabannya. URL server acme-dns: https://acme.2nd.pp.ua

Pada pembukaan, klien mengeluarkan catatan yang perlu ditambahkan ke server DNS yang ada (prosedur satu kali):

[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.

Menuju otomatisasi penerbitan SSL

Kami membuat catatan yang diperlukan dan memastikan bahwa itu dibuat dengan benar:

Menuju otomatisasi penerbitan SSL

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

Kami mengonfirmasi bahwa kami telah membuat entri yang diperlukan di winacme, dan melanjutkan proses pembuatan sertifikat:

Menuju otomatisasi penerbitan SSL

Cara menggunakan certbot sebagai klien dijelaskan di sini.

Ini menyelesaikan proses pembuatan sertifikat; Anda dapat menginstalnya di server web dan menggunakannya. Jika pada saat membuat sertifikat Anda juga membuat tugas di penjadwal, maka kedepannya proses perpanjangan sertifikat akan terjadi secara otomatis.

Sumber: www.habr.com

Tambah komentar