Menyang otomatisasi penerbitan SSL

Cukup asring kita kudu nggarap sertifikat SSL. Ayo elinga proses nggawe lan nginstal sertifikat (ing kasus umum kanggo umume).

  • Temokake panyedhiya (situs sing bisa tuku SSL).
  • Nggawe CSR.
  • Kirim menyang panyedhiya sampeyan.
  • Verifikasi kepemilikan domain.
  • Entuk sertifikat.
  • Ngonversi sertifikat menyang formulir sing dibutuhake (opsional). Contone, saka pem kanggo PKCS #12.
  • Instal sertifikat ing server web.

Relatif cepet, ora rumit lan bisa dingerteni. Opsi iki cukup cocok yen kita duwe maksimal sepuluh proyek. Apa yen ana luwih akeh, lan duwe paling ora telung lingkungan? Pengembang klasik - pementasan - produksi. Ing kasus iki, iku worth mikir bab ngotomatisasi proses iki. Aku propose kanggo delve sethitik tuwa menyang masalah lan golek solusi sing bakal luwih nyilikake wektu ngginakaken ing nggawe lan njaga sertifikat. Artikel kasebut bakal ngemot analisis masalah lan pandhuan cilik kanggo pengulangan.

Ayo kula nggawe reservasi luwih dhisik: spesialisasi utama perusahaan kita yaiku .net, lan, kanthi mangkono, IIS lan produk Windows liyane sing gegandhengan. Mulane, klien ACME lan kabeh tumindak kanggo iku uga bakal diterangake saka sudut pandang nggunakake Windows.

Kanggo sapa iki relevan lan sawetara data awal

Perusahaan K diwakili dening penulis. URL (contone): company.tld

Project X minangka salah sawijining proyek kita, nalika nggarap aku nggawe kesimpulan yen kita isih kudu ngirit wektu maksimal nalika nggarap sertifikat. Proyek iki nduweni papat lingkungan: dev, test, pementasan lan produksi. Dev lan tes ana ing sisih kita, pementasan lan produksi ana ing sisih klien.

Fitur khusus proyek kasebut yaiku duwe akeh modul sing kasedhiya minangka subdomain.

Sing, kita duwe gambar ing ngisor iki:

Dev
test
Staging
Produksi

projectX.dev.company.tld
projectX.test.company.tld
pementasan.projectX.tld
projectX.tld

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

module2.projectX.dev.company.tld
module2.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
modulN.projectX.tld

Kanggo produksi, sertifikat wildcard sing dituku digunakake, ora ana pitakonan sing muncul ing kene. Nanging mung nyakup tingkat pisanan saka subdomain. Patut, yen ana certificate kanggo *.projectX.tld, banjur bakal bisa kanggo staging.projectX.tld, nanging ora kanggo module1.staging.projectX.tld. Nanging piye wae aku ora pengin tuku sing kapisah.

Lan iki mung adhedhasar conto siji proyek siji perusahaan. Lan, mesthi, ana luwih saka siji proyek.

Alasan umum kanggo saben wong kanggo ngatasi masalah iki katon kaya iki:

  • bubar Google ngusulake ngurangi wektu validitas maksimum sertifikat SSL. Kanthi kabeh akibat.
  • Nggampangake proses nerbitake lan njaga SSL kanggo kabutuhan internal proyek lan perusahaan kanthi sakabehe.
  • Panyimpenan terpusat saka cathetan sertifikat, sing sebagian ngatasi masalah verifikasi domain nggunakake DNS lan nganyari otomatis sabanjure, lan uga ngrampungake masalah kepercayaan klien. Isih, CNAME ing server perusahaan partner / performer luwih dipercaya tinimbang ing sumber daya pihak katelu.
  • Inggih, pungkasanipun, ing kasus iki tembung "luwih becik duwe tinimbang ora duwe" pas banget.

Milih Panyedhiya SSL lan Langkah-langkah Persiapan

Antarane pilihan sing kasedhiya kanggo sertifikat SSL gratis, cloudflare lan letsencrypt dianggep. DNS kanggo iki (lan sawetara proyek liyane) di-host dening cloudflare, nanging aku ora seneng nggunakake sertifikat kasebut. Mulane, diputusake nggunakake letsencrypt.
Kanggo nggawe sertifikat SSL wildcard, sampeyan kudu ngonfirmasi kepemilikan domain. Prosedur iki kalebu nggawe sawetara rekaman DNS (TXT utawa CNAME), banjur verifikasi nalika nerbitake sertifikat. Linux nduweni utilitas - sertifikat, sing ngidini sampeyan sebagian (utawa rampung kanggo sawetara panyedhiya DNS) ngotomatisasi proses iki. Kanggo Windows saka ditemokake lan diverifikasi opsi klien ACME aku dienggoni ing WinACME.

Lan rekaman kanggo domain wis digawe, ayo pindhah menyang nggawe sertifikat:

Menyang otomatisasi penerbitan SSL

Kita kasengsem ing kesimpulan pungkasan, yaiku, pilihan sing kasedhiya kanggo konfirmasi kepemilikan domain kanggo nerbitake sertifikat wildcard:

  1. Gawe cathetan DNS kanthi manual (nganyari otomatis ora didhukung)
  2. Nggawe cathetan DNS nggunakake server acme-dns (sampeyan bisa maca liyane babagan kene.
  3. Nggawe cathetan DNS nggunakake skrip sampeyan dhewe (padha karo plugin cloudflare kanggo certbot).

Sepisanan, titik katelu cukup cocok, nanging apa yen panyedhiya DNS ora ndhukung fungsi iki? Nanging kita butuh kasus umum. Nanging kasus umum yaiku cathetan CNAME, amarga kabeh wong ndhukung. Mulane, kita mandheg ing titik 2 lan pindhah menyang konfigurasi server ACME-DNS.

Nggawe server ACME-DNS lan proses penerbitan sertifikat

Contone, aku nggawe domain 2nd.pp.ua, lan bakal digunakake ing mangsa ngarep.

Syarat wajib Supaya server bisa mlaku kanthi bener, perlu nggawe cathetan NS lan A kanggo domain kasebut. Lan wayahe karu pisanan sing aku ketemu iku cloudflare (paling ora ing mode free nggunakake) ora ngijini sampeyan kanggo bebarengan nggawe rekaman NS lan A kanggo host padha. Ora iki masalah, nanging ing ikatan iku bisa. Dhukungan kasebut mangsuli manawa panele ora ngidini nindakake iki. Ora masalah, ayo nggawe rong rekaman:

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

Ing tahap iki, host kita kudu mutusake masalah acmens.2nd.pp.ua.

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

Nanging acme.2nd.pp.ua ora bakal mutusake masalah, amarga server DNS sing nglayani durung mlaku.

Cathetan wis digawe, kita nerusake nyetel lan miwiti server ACME-DNS. Bakal urip ing server ubuntu ing docker wadhah, nanging sampeyan bisa mbukak ing ngendi wae ing ngendi golang kasedhiya. Windows uga cukup cocok, nanging aku isih seneng server Linux.

Gawe direktori lan file sing dibutuhake:

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

Ayo nggunakake vim karo editor teks favorit lan paste conto menyang config.cfg konfigurasi.

Kanggo operasi sing sukses, cukup kanggo mbenerake bagean umum lan 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"
…

Uga, yen dikarepake, kita bakal nggawe file docker-compose ing 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

siyap. Sampeyan bisa mbukak.

$ docker-compose up -d

Ing tataran iki tuan rumah kudu miwiti kanggo mutusake masalah acme.2nd.pp.ua, lan 404 katon ing 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

Yen iki ora katon - docker logs -f <container_name> kanggo bantuan, Begjanipun, log cukup diwaca.

Kita bisa miwiti nggawe sertifikat. Bukak powershell minangka administrator lan mbukak winacme. Kita kasengsem ing pemilihan:

  • M: Gawe sertifikat anyar (pilihan lengkap)
  • 2: Input manual
  • 2: [dns-01] Gawe cathetan verifikasi nganggo acme-dns (https://github.com/joohoi/acme-dns)
  • Nalika takon babagan link menyang server ACME-DNS, ketik URL server digawe (https) ing jawaban. URL server acme-dns: https://acme.2nd.pp.ua

Ing bukaan, klien ngetokake rekaman sing kudu ditambahake menyang server DNS sing ana (prosedur siji-wektu):

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

Menyang otomatisasi penerbitan SSL

Kita nggawe rekaman sing dibutuhake lan priksa manawa digawe kanthi bener:

Menyang otomatisasi penerbitan SSL

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

Kita konfirmasi manawa kita wis nggawe entri sing dibutuhake ing winacme, lan nerusake proses nggawe sertifikat:

Menyang otomatisasi penerbitan SSL

Cara nggunakake certbot minangka klien diterangake kene.

Iki ngrampungake proses nggawe sertifikat; sampeyan bisa nginstal ing server web lan nggunakake. Yen, nalika nggawe sertifikat, sampeyan uga nggawe tugas ing panjadwal, banjur proses nganyari maneh sertifikat bakal kedadeyan kanthi otomatis.

Source: www.habr.com

Add a comment