SSL発行の自動化に向けお

倚くの堎合、SSL 蚌明曞を䜿甚する必芁がありたす。 蚌明曞を䜜成しおむンストヌルするプロセス (ほずんどの堎合、䞀般的な堎合) を思い出しおください。

  • プロバむダヌ (SSL を賌入できるサむト) を探したす。
  • CSRを生み出す。
  • プロバむダヌに送信しおください。
  • ドメむンの所有暩を確認したす。
  • 蚌明曞を取埗したす。
  • 蚌明曞を必芁な圢匏に倉換したす (オプション)。 たずえば、pem から PKCS #12 ぞ。
  • 蚌明曞を Web サヌバヌにむンストヌルしたす。

比范的高速で、耇雑ではなく、理解しやすいです。 このオプションは、最倧 XNUMX 個のプロゞェクトがある堎合に非垞に適しおいたす。 もっず倚くの環境があり、少なくずも XNUMX ぀の環境がある堎合はどうなるでしょうか? 叀兞的な開発、ステヌゞング、運甚。 この堎合、このプロセスを自動化するこずを怜蚎する䟡倀がありたす。 この問題をもう少し深く掘り䞋げお、蚌明曞の䜜成ず維持に費やす時間をさらに最小限に抑える解決策を芋぀けるこずを提案したす。 この蚘事には、問題の分析ず繰り返しに関する小さなガむドが含たれおいたす。

事前に予玄させおいただきたす。圓瀟の䞻な専門分野は .net であり、それに応じお IIS およびその他の Windows 関連補品も専門ずしおいたす。 したがっお、ACME クラむアントずそのすべおのアクションに぀いおも、Windows を䜿甚する芳点から説明したす。

これは誰に関係するのか、そしおいく぀かの初期デヌタ

著者が代衚を務めるK瀟。 URL (䟋): company.tld

プロゞェクト X は私たちのプロゞェクトの XNUMX ぀であり、これに取り組んでいるうちに、蚌明曞を扱う際に最倧限の時間を節玄する必芁があるずいう結論に達したした。 このプロゞェクトには、開発、テスト、ステヌゞング、運甚の XNUMX ぀の環境がありたす。 開発ずテストは私たちの偎にあり、ステヌゞングず本番はクラむアント偎にありたす。

このプロゞェクトの特別な特城は、サブドメむンずしお利甚できるモゞュヌルが倚数あるこずです。

぀たり、次のような図がありたす。

デベロッパヌ
ホむヌル詊乗
䞊挔
生産

projectX.dev.company.tld
projectX.test.company.tld
staging.projectX.tld
プロゞェクトX.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
moduleN.projectX.tld

実皌働環境では、賌入したワむルドカヌド蚌明曞が䜿甚されたすが、ここで疑問は生じたせん。 ただし、これはサブドメむンの最初のレベルのみをカバヌしたす。 したがっお、*.projectX.tld の蚌明曞がある堎合、staging.projectX.tld では機胜したすが、module1.staging.projectX.tld では機胜したせん。 でも、なぜか別のものを買いたくないんです。

そしおこれは、ある䌁業の XNUMX ぀のプロゞェクトの䟋に基づいおいるにすぎたせん。 そしおもちろん、プロゞェクトは耇数ありたす。

誰もがこの問題に取り組む䞀般的な理由は次のずおりです。

  • ОтМПсОтельМПМеЎавМП Google、SSL蚌明曞の最倧有効期間を短瞮するこずを提案。 すべおの結果を䌎いたす。
  • プロゞェクトや䌚瀟党䜓の内郚ニヌズに合わせお、SSL の発行ず維持のプロセスを促進したす。
  • 蚌明曞レコヌドの集䞭ストレヌゞ。これにより、DNS を䜿甚したドメむン怜蚌ずその埌の自動曎新の問題が郚分的に解決され、クラむアントの信頌の問題も解決されたす。 それでも、パヌトナヌ/実行䌁業のサヌバヌ䞊の CNAME は、サヌドパヌティのリ゜ヌス䞊の CNAME よりも信頌できたす。
  • さお、最埌に、この堎合は「持たないよりはあったほうが良い」ずいう衚珟がぎったりず圓おはたりたす。

SSLプロバむダヌの遞択ず準備手順

無料の SSL 蚌明曞で利甚可胜なオプションの䞭で、cloudflare ず letsencrypt が怜蚎されたした。 この (および他のいく぀かのプロゞェクト) の DNS は Cloudflare によっおホストされおいたすが、私はその蚌明曞を䜿甚するのが奜きではありたせん。 したがっお、letsencrypt を䜿甚するこずにしたした。
ワむルドカヌド SSL 蚌明曞を䜜成するには、ドメむンの所有暩を確認する必芁がありたす。 この手順には、DNS レコヌド (TXT たたは CNAME) を䜜成し、蚌明曞を発行するずきにそれを怜蚌するこずが含たれたす。 Linuxにはナヌティリティがありたす - 蚌明曞を䜿甚するず、このプロセスを郚分的に (たたは䞀郚の DNS プロバむダヌでは完党に) 自動化できたす。 Windowsの堎合は以䞋から 芋぀けお確認した 私が決めた ACME クラむアント オプション WinACME.

ドメむンのレコヌドが䜜成されたので、蚌明曞の䜜成に進みたしょう。

SSL発行の自動化に向けお

最埌の結論、぀たり、ワむルドカヌド蚌明曞を発行するためにドメむンの所有暩を確認するために利甚できるオプションに興味がありたす。

  1. DNS レコヌドを手動で䜜成したす (自動曎新はサポヌトされおいたせん)
  2. acme-dns サヌバヌを䜿甚しお DNS レコヌドを䜜成する (詳现に぀いおは、こちらをご芧ください) ここで.
  3. 独自のスクリプトを䜿甚しお DNS レコヌドを䜜成したす (certbot 甚の Cloudflare プラグむンず同様)。

䞀芋するず、2 番目の点は非垞に適切ですが、DNS プロバむダヌがこの機胜をサポヌトしおいない堎合はどうなるでしょうか? しかし、䞀般的なケヌスが必芁です。 ただし、CNAME レコヌドは誰もがサポヌトしおいるため、䞀般的なケヌスずなりたす。 したがっお、ポむント XNUMX で停止し、ACME-DNS サヌバヌの構成に進みたす。

ACME-DNS サヌバヌず蚌明曞発行プロセスのセットアップ

たずえば、ドメむン 2nd.pp.ua を䜜成し、今埌はそれを䜿甚する予定です。

必須芁件 サヌバヌが正しく動䜜するには、そのドメむンの NS レコヌドず A レコヌドを䜜成する必芁がありたす。 そしお、私が遭遇した最初の䞍愉快な瞬間は、cloudflare (少なくずも無料䜿甚モヌド) では、同じホストに察しお NS レコヌドず A レコヌドを同時に䜜成できないこずです。 これが問題ずいうわけではありたせんが、バむンドでは可胜です。 サポヌトは、パネルがこれを行うこずを蚱可しおいないず答えたした。 問題ありたせん。XNUMX ぀のレコヌドを䜜成したしょう。

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

この段階で、ホストは解決する必芁がありたす acmens.2nd.pp.ua.

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

しかし acme.2nd.pp.ua サヌビスを提䟛する DNS サヌバヌがただ実行されおいないため、解決されたせん。

レコヌドが䜜成されたので、ACME-DNS サヌバヌのセットアップず起動に進みたす。 私のubuntuサヌバヌ䞊に存圚したす ドッカヌ コンテナですが、golang が利甚できる堎所ならどこでも実行できたす。 Windows も非垞に適しおいたすが、私はやはり Linux サヌバヌを奜みたす。

必芁なディレクトリずファむルを䜜成したす。

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

お気に入りのテキスト ゚ディタヌで vim を䜿甚し、サンプルを config.cfg に貌り付けおみたしょう。 構成.

正垞に操䜜するには、䞀般セクションず 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"



たた、必芁に応じお、メむン サヌビス ディレクトリに docker-compose ファむルを䜜成したす。

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

準備ができお。 実行できたす。

$ docker-compose up -d

この段階で、ホストは解決を開始するはずです acme.2nd.pp.ua、404 が衚瀺されたす 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

これが衚瀺されない堎合 - docker logs -f <container_name> 幞いなこずに、ログは非垞に読みやすいです。

蚌明曞の䜜成を開始できたす。 管理者ずしお powershell を開き、winacme を実行したす。 私たちは遞挙に興味がありたす:

  • M: 新しい蚌明曞を䜜成したす (フルオプション)
  • 2:手動入力
  • 2: [dns-01] acme-dns で怜蚌レコヌドを䜜成 (https://github.com/joohoi/acme-dns)
  • ACME-DNS サヌバヌぞのリンクに぀いお尋ねられたら、䜜成したサヌバヌの URL (https) を回答に入力したす。 acme-dns サヌバヌの URL: https://acme.2nd.pp.ua

最初に、クラむアントは既存の DNS サヌバヌに远加する必芁があるレコヌドを発行したす (XNUMX 回限りの手順)。

[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発行の自動化に向けお

必芁なレコヌドを䜜成し、それが正しく䜜成されたこずを確認したす。

SSL発行の自動化に向けお

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

winacme に必芁な゚ントリが䜜成されたこずを確認し、蚌明曞の䜜成プロセスを続行したす。

SSL発行の自動化に向けお

certbot をクラむアントずしお䜿甚する方法に぀いお説明したす ここで.

これで蚌明曞の䜜成プロセスが完了し、Web サヌバヌにむンストヌルしお䜿甚できるようになりたす。 蚌明曞を䜜成するずきにスケゞュヌラでタスクも䜜成するず、今埌は蚌明曞の曎新プロセスが自動的に実行されたす。

出所 habr.com

コメントを远加したす