Nuju automation tina penerbitan SSL

Sering urang kedah damel sareng sertipikat SSL. Hayu urang émut prosés nyiptakeun sareng masang sertipikat (dina kasus umum pikeun kalolobaanana).

  • Milarian panyadia (situs dimana urang tiasa mésér SSL).
  • Ngahasilkeun CSR.
  • Kirimkeun ka panyadia anjeun.
  • Pariksa kapamilikan domain.
  • Kéngingkeun sertipikat.
  • Ngarobih sertipikat kana bentuk anu diperyogikeun (opsional). Contona, ti pem ka PKCS #12.
  • Pasang sertipikat dina pangladén wéb.

Relatip gancang, henteu rumit sareng kaharti. Pilihan ieu cukup cocog upami urang gaduh maksimal sapuluh proyék. Kumaha lamun aya leuwih ti aranjeunna, jeung maranéhna mibanda sahanteuna tilu lingkungan? Dev klasik - pementasan - produksi. Dina hal ieu, éta patut mikir ngeunaan automating prosés ieu. Kuring ngajukeun delve saeutik deeper kana masalah jeung manggihan solusi anu salajengna bakal ngaleutikan waktos spent dina nyieun jeung ngajaga sertipikat. Artikel bakal ngandung analisa masalah sareng pituduh leutik pikeun pengulangan.

Hayu atuh nyieun reservasi sateuacanna: Spésialisasi utama parusahaan urang téh .net, sarta, sasuai, IIS jeung produk Windows séjén patali. Ku alatan éta, klien ACME sareng sadaya tindakan pikeun éta ogé bakal dijelaskeun tina sudut pandang ngagunakeun Windows.

Kanggo saha ieu relevan sareng sababaraha data awal

Pausahaan K diwakilan ku pangarang. URL (contona): company.tld

Proyék X mangrupikeun salah sahiji proyék urang, nalika damel dimana kuring nyimpulkeun yén urang masih kedah ngaléngkah ka tabungan waktos maksimal nalika damel sareng sertipikat. Proyék ieu ngagaduhan opat lingkungan: dev, uji, pementasan sareng produksi. Dev sareng uji aya di sisi kami, pementasan sareng produksi aya di sisi klien.

A fitur husus tina proyék téh nya éta ngabogaan sajumlah badag modul nu sadia sakumaha subdomains.

Maksudna, urang gaduh gambar di handap ieu:

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

Pikeun produksi, sertipikat wildcard dibeuli dipaké, euweuh patarosan timbul di dieu. Tapi ngan nyertakeun tingkat mimiti subdomain nu. Sasuai, lamun aya sertipikat pikeun *.projectX.tld, mangka bakal dianggo pikeun staging.projectX.tld, tapi teu modul1.staging.projectX.tld. Tapi kumaha bae kuring teu hayang meuli hiji misah.

Sareng ieu ngan ukur dumasar kana conto hiji proyék hiji perusahaan. Sareng, tangtosna, aya langkung ti hiji proyék.

Alesan umum pikeun sadayana pikeun ngatasi masalah ieu sapertos kieu:

  • Nembe Google ngusulkeun ngurangan periode validitas maksimum sertipikat SSL. Kalayan sagala akibat.
  • Ngagampangkeun prosés ngaluarkeun sareng ngajaga SSL pikeun kabutuhan internal proyék sareng perusahaan sacara gembleng.
  • Panyimpenan terpusat rékaman sertipikat, anu sawaréh ngarengsekeun masalah verifikasi domain nganggo DNS sareng pembaharuan otomatis salajengna, sareng ogé ngarengsekeun masalah kapercayaan klien. Leungit, CNAME dina pangladén perusahaan mitra/pelaku langkung dipercaya tibatan sumber daya pihak katilu.
  • Muhun, tungtungna, dina hal ieu frase "éta hadé pikeun mibanda ti teu boga" fits sampurna.

Milih Panyadia SSL sareng Léngkah Persiapan

Diantara pilihan anu sayogi pikeun sertipikat SSL gratis, cloudflare sareng letsencrypt dianggap. DNS pikeun ieu (sareng sababaraha proyék sanésna) di-host ku cloudflare, tapi kuring henteu resep ngagunakeun sertipikatna. Ku alatan éta, ieu mutuskeun pikeun ngagunakeun letsencrypt.
Pikeun nyieun sertipikat SSL wildcard, anjeun kedah mastikeun kapamilikan domain. Prosedur ieu ngalibatkeun nyiptakeun sababaraha rékaman DNS (TXT atanapi CNAME), teras pariksa nalika ngaluarkeun sertipikat. Linux ngagaduhan utilitas - sertipikat, nu ngidinan Anjeun pikeun sawaréh (atawa sagemblengna pikeun sababaraha panyadia DNS) ngajadikeun otomatis prosés ieu. Pikeun Windows ti kapanggih jeung diverifikasi pilihan klien ACME I netep dina WinACME.

Sareng rékaman pikeun domain parantos didamel, hayu urang teraskeun kana nyiptakeun sertipikat:

Nuju automation tina penerbitan SSL

Kami resep kana kacindekan anu terakhir, nyaéta, pilihan anu sayogi pikeun mastikeun kapamilikan domain pikeun ngaluarkeun sertipikat wildcard:

  1. Jieun rékaman DNS sacara manual (update otomatis henteu didukung)
  2. Nyiptakeun rékaman DNS nganggo server acme-dns (anjeun tiasa maca langkung seueur ngeunaan di dieu.
  3. Nyiptakeun rékaman DNS nganggo skrip anjeun nyalira (sarupa sareng plugin cloudflare pikeun certbot).

Dina glance kahiji, titik katilu cukup merenah, tapi kumaha lamun panyadia DNS teu ngarojong pungsi ieu? Tapi urang peryogi kasus umum. Sareng kasus umum nyaéta rékaman CNAME, sabab sadayana ngadukung aranjeunna. Kituna, urang eureun di titik 2 tur buka ngonpigurasikeun server ACME-DNS kami.

Nyetél server ACME-DNS sareng prosés penerbitan sertipikat

Salaku conto, kuring nyiptakeun domain 2nd.pp.ua, sareng bakal dianggo dina waktosna.

Sarat wajib Pikeun server tiasa dianggo leres, perlu pikeun nyieun NS jeung A rékaman pikeun domain na. Sarta momen pikaresepeun munggaran nu kuring encountered éta cloudflare (sahenteuna dina modeu pamakéan bébas) teu ngidinan Anjeun pikeun sakaligus nyieun hiji NS na A catetan keur host sarua. Teu yén ieu téh masalah, tapi dina meungkeut mungkin. Pangrojong ngawaler yén panelna henteu ngijinkeun ngalakukeun ieu. Henteu masalah, hayu urang jieun dua rékaman:

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

Dina tahap ieu, host urang kedah ngabéréskeun acmens.2nd.pp.ua.

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

sarta di dieu acme.2nd.pp.ua eta moal ngabéréskeun, saprak server DNS anu ngalayanan eta teu acan ngajalankeun.

Rékaman parantos didamel, urang teraskeun kana nyetél sareng ngaluncurkeun server ACME-DNS. Éta bakal hirup dina server ubuntu kuring di docker wadahna, tapi anjeun bisa ngajalankeun eta dimana wae dimana aya golang. Windows oge rada cocog, tapi kuring masih resep server Linux Ubuntu.

Jieun diréktori sareng file anu diperyogikeun:

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

Hayu urang nganggo vim sareng pangropéa téksu karesep anjeun sareng témpélkeun conto kana config.cfg konfigurasi.

Pikeun operasi anu suksés, cukup pikeun ngabenerkeun bagian umum sareng 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"
…

Ogé, upami hoyong, urang bakal nyiptakeun file docker-compose dina diréktori jasa 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. Anjeun tiasa ngajalankeun eta.

$ docker-compose up -d

Dina tahap ieu host kudu dimimitian pikeun ngabéréskeun acme.2nd.pp.ua, sarta 404 nembongan dina 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

Upami ieu henteu muncul - docker logs -f <container_name> pikeun mantuan, untungna, log anu cukup dibaca.

Urang bisa ngamimitian nyieun sertipikat. Buka powershell salaku administrator sareng ngajalankeun winacme. Kami museurkeun pamilihan:

  • M: Jieun sertipikat anyar (pilihan lengkep)
  • 2: Input manual
  • 2: [dns-01] Jieun rékaman verifikasi nganggo acme-dns (https://github.com/joohoi/acme-dns)
  • Nalika ditaroskeun ngeunaan tautan kana server ACME-DNS, lebetkeun URL tina server anu diciptakeun (HTTPS) dina jawaban. URL server acme-dns: https://acme.2nd.pp.ua

Dina bubuka, klien nu ngaluarkeun catetan nu perlu ditambahkeun kana server DNS aya (prosedur hiji-waktos):

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

Nuju automation tina penerbitan SSL

Kami nyiptakeun rékaman anu diperyogikeun sareng pastikeun yén éta diciptakeun leres:

Nuju automation tina penerbitan SSL

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

Kami mastikeun yén kami parantos nyiptakeun éntri anu diperyogikeun dina winacme, sareng teraskeun prosés nyiptakeun sertipikat:

Nuju automation tina penerbitan SSL

Kumaha ngagunakeun certbot salaku klien dijelaskeun di dieu.

Ieu ngalengkepan prosés nyiptakeun sertipikat; anjeun tiasa pasang dina pangladén wéb sareng dianggo. Upami, nalika nyiptakeun sertipikat, anjeun ogé nyiptakeun tugas dina panjadwal, maka di hareup prosés pembaharuan sertipikat bakal lumangsung sacara otomatis.

sumber: www.habr.com

Tambahkeun komentar