Let'sEncryptの証明書は別々のドメインを集約できた。
Let'sEncryptのDNS更新クライアントを作っていた。仕様をアレコレと確認し、色々な組み合わせで証明書を発行したのですが。
「もしかして、異なるベース・ドメインでも認証通るんじゃね?」 と思いついた。1分ほど考えた、SAN値の問題なので証明書的には発行できるはず。Let'sEncryptが対応可能かに依存するだろう。Let'sEncryptのドキュメントを見た。ドメインのリストに言及はない。レート制限くらいである。実験したほうが早そうだ。
早速試しててみた。すると、ベースになるドメイン名が、異なっていても、Let'sEncryptなら1枚の証明書として発行してくれた。まじか。
作った証明書をWindowsで表示した例
xxx.com と xxx.biz が両方SubjectAlternativeNameにあるのがわかるでしょうか。
試してみる。
次のような流れで、試してみた。
サンプルドメイン
次の2つのドメインで発行を試みる。
multi-sample.example.com multi.example.biz.tld
DNS-01 を使う
今回は、処理が簡単なDNS-01を使う。
Cloudflare 側で、すべてのZoneのDNSレコードを操作できるAPIトークンを作った。
このトークンをcloudflare-api.cfg
に保存してスタート。
発行コマンドを実行
/usr/bin/certbot certonly \ --cert-name sample-multiple \ --dns-cloudflare \ --dns-cloudflare-credentials cloudflare-api.cfg \ -d "multi-sample.example.com" \ -d "multi.example.biz.tld"
実行が始まる。
Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator dns-cloudflare, Installer None Requesting a certificate for multi.example.biz.tld and multi-sample.example.com Performing the following challenges: dns-01 challenge for multi.example.biz.tld dns-01 challenge for multi-sample.example.com Waiting 10 seconds for DNS changes to propagate Waiting for verification... Cleaning up challenges
発行された
Certificate Name: sample-multiple Serial Number: 937d530297d53029xxx Key Type: RSA Domains: multi.example.biz.tld multi-sample.example.com Expiry Date: 2023-05-12 15:11:37+00:00 (VALID: 89 days) Certificate Path: /etc/letsencrypt/live/sample-multiple/fullchain.pem Private Key Path: /etc/letsencrypt/live/sample-multiple/privkey.pem
証明書のSAN値を確認する
SAN値でも、ちゃんと表示されている。
sudo openssl x509 -noout -ext subjectAltName -in /etc/letsencrypt/live/sample-multiple/fullchain.pem X509v3 Subject Alternative Name: DNS:multi-sample.example.com, DNS:multi.example.biz.tld
勝手な思い込み=「証明書はドメインごと」
SANを使えば、別々のドメインでも発行できるのは、当たり前なんだけど。
SSL証明書を購入するときってドメインごとにに買っていたので、1枚にまとめるなんて言う発想はまったくなかった。ドメインが違うと証明書と鍵を別々に発行する。というよくある手順。これって単なる思い込み。なんですよね。OpenSSLのX509を考えれば、出来ても当然ですわ。
Let'sEncryptは複数ドメイン証明書はサブドメインだけでなく、メイン・ドメインを複数発行にも対応していました。
メリット
管理がとても簡単になる。枚数が増えると負荷が増える。枚数が減れば、管理の負荷も下がる。
セキュリティ的なこと
別々のドメイン名の証明書を1枚にまとめるのは、セキュリティ面では、推奨されない。という意見もある。それを言い出すと、ワイルドカードな証明書すら使えない。なので、ドメインごとに1枚ずつ発行する必要がある。枚数が増えると、管理コストが嵩み、逆にヒューマンエラーの危険性を招くこともある。「〇〇をすれば完全OKというセキュリティなど存在しない。」なのがセキュリティの原則だ。セキュリティはいつも落とし所が違う。管理コストなど勘案して妥当なところを使うのがセキュリティだ。
個人的な意見ですが、管理を平易化しミスを減らし危険行為を未然に防ぐという視点から別々のドメインを1枚にまとめるのはアリだと思います。
たとえば、これはGoogleとか言う大手企業のSSL証明書です。
Google さんの証明書を見てみると、SAN値に大量のドメイン名が入っています。ドメイン所有の明示しているのがわかる。
むかし、ドメイン名とSSLは管理の関係で1枚にしろとセキュリティの偉い人に言われた記憶があるんだけど。いまは、もう証明書なんて1枚で済ませるんですよ。
そして、Let'sEncryptでも対応できるのが素晴らしいと思った次第です。