昨日書いた以下の記事の応用です。今回はLet’s Encryptではなく、ZeroSSLのワイルドカード証明書を取得します。
ちなみにZeroSSLとは、Let’s Encryptと同じく無料でSSL証明書を取得できるサービスで、ブラウザ上で証明書の発行や削除といった管理を行えることが特徴です。
また、冒頭の記事と同様、本記事ではCloudflareを例に説明しますが、他の大手DNSプロバイダ(Route 53など)に対応したカスタム版Caddyも公開されているので、応用できるはずです。
前提として、以下の環境で作業します。
- サーバ: Ubuntu 22.04
- カスタム版Caddy: v2.8.4
ZeroSSLのAPI利用準備
ZeroSSLのダッシュボードにログイン後、左メニューの「Developer」をクリックし、API Key
をメモします。また、「EAB Credentials for ACME Clients」の「Generate」ボタンをクリックし、表示されたEAB KID
とEAB HMAC Key
をメモします。
なお、ZeroSSLではこのACME機能を利用することで、ワイルドカード証明書を無制限かつ無料で発行できるようになります(2024/8/6現在、ブラウザ上からの発行は有償プランのみ)。
Cloudflare APIトークンの発行からカスタム版Caddyのインストール
Caddyの設定変更までに行う内容は以下の記事に記載しています。
Caddyの設定変更
CaddyでZeroSSLとCloudflareのAPIを使用する準備が整ったので、設定ファイルを編集します。
$ sudo nano /etc/caddy/Caddyfile
以下は、xxx.yusukesakai.com
で公開するNextcloudのリバースプロキシ用の設定例です。
{ auto_https disable_redirects ocsp_stapling off email {{MAIL ADDRESS}} } *.yusukesakai.com { tls { issuer zerossl {{API Key}} issuer acme https://acme.zerossl.com/v2/DV90 { eab {{EAB KID}} {{EAB HMAC Key}} dns cloudflare {{API TOKEN}} } } @xxx host xxx.yusukesakai.com handle @xxx { root * /snap/nextcloud/current file_server reverse_proxy localhost:80 { flush_interval -1 } encode zstd gzip redir /.well-known/carddav /remote.php/dav/ 301 redir /.well-known/caldav /remote.php/dav/ 301 } }
ポイントをいくつか記載します。
email
でZeroSSLで登録したメールアドレスを設定します。登録していないメールアドレスの場合、証明書は発行されますが、ZeroSSLのダッシュボードで管理できません*.yusukesakai.com
で公開するドメインのサブドメインをワイルドカードで指定します。これと後述するtls
の設定でワイルドカード証明書を自動で取得しますtls
内のissuer zerossl
に、ZeroSSLのAPI Key
を貼り付けますissuer acme
内のeab
に、ZeroSSLのEAB KID
とEAB HMAC Key
を貼り付けます(間にスペースを入れます)issuer acme
内のdns cloudflare
に、CloudflareのAPIトークン
を貼り付けます@xxx host xxx.yusukesakai.com
と後述のhandle @xxx
でサブドメイン毎の設定を行います。xxx
は適宜変更してください
以下のコマンドで設定ファイルを検証後、エラーがなければCaddyを再起動します。
$ sudo caddy validate --config /etc/caddy/Caddyfile $ sudo systemctl restart caddy
以上で設定は完了です。お疲れさまでした。
動作確認
API連携が正常に動作していれば、ZeroSSLのダッシュボード>Certificatesから、証明書の発行状況を確認できます(2つ存在しますが深い意味はありません)。
また、設定後に対象のサイトにアクセスすると、ZeroSSLのワイルドカード証明書が発行されていることを確認できます。
余談
どうやらZeroSSLはCaddyの大口スポンサーのようです。カスタム版ではなく標準の設定でAPIに対応しているのは、そういう金銭的な背景もあるのかもしれません。