2022/02/28

Let's Encrypt で取得したマルチドメインでワイルドカードなTLS 証明書をエクスポートしてみた

バージョン 12 のTLS証明書管理が 12.0.1 でさらに拡張されて使いやすくなりました。

12.0 では、既存のTLS証明書を証明書ストアへインポートすることはできましたが、TLS証明書を Domino 以外のサーバーで使いたいときにエクスポートすることができなかったのです。

12.0.1 ではTLS証明書のエクスポートも可能になりました。

このTLS証明書のエクスポートについては、既に技術ウェビナーでも紹介されてますし、CertMgr開発者であるダニエル先生のブログエントリでも紹介されていますので、詳しくはそちらをご確認ください。


今回私が想定するシナリオは次のケースです。

  • 複数のWebサーバーを複数のドメイン名で運用していて、TLS証明書の数が多い
  • 新たに構築するWebサーバーのためにTLS証明書を取得することになった
  • この機会に既存の証明書をワイルドカード証明書にして証明書の数を減らしたい
  • 複数のドメイン名をまとめてマルチドメイン証明書にしたい
これらを Domino の証明書管理機能でどう解決できるのでしょうか。

ここでは、既存サーバーにはまだ有効期限内のTLS証明書があったかもしれないですが、それは新たな証明書で置換するものとします。

まずは証明書ストア(CertStore.nsf)のTLS証明書のビューにある [TLS証明書の追加]ボタンをクリックします。


まっさらなTLS証明書文書が開いたら、上部にある[エクスポート可能キーの作成]をクリックします。

エクスポート可能キーはTLS証明書の取得後に作成することができないため、初めの段階で作成します。パスワードをタイプするとパスワードクオリティが表示されるのですが、"弱"や"中"では[OK]ボタンをクリックしてもエラーが表示されます。これが"強"になるまで先に進めません。

エクスポート可能キーが作成できると、「セキュリティ/キー」タブの最下部に「エクスポート可能秘密鍵」が追加されます。

TLS証明書をエクスポート可能にするために必要な準備はこれだけです。

あとは「メイン」タブにある「ホスト名」や「アクセスできるサーバー」などの必要項目を埋めて[要求の送信]ボタンをクリックする、というマニュアル通りの操作を行い、TLS証明書を作成します。ここでは「ホスト名」に2つの異なるドメイン(v1.dominorestapi.work と dominov12beta.work)をワイルドカードで指定しました。「ACME アカウント」にはテストということで "LetsEncryptStaging" を選択しました。

以前に CertMgr で Let's Encrypt からTLS証明書を取得した実績のあるドメインでしたので、無事に証明書が取得できました。


ちなみにワイルカード証明書は DNS-01 チャレンジでのみ取得できます。ホスト名に指定した2つのドメインですが、ドメインを管理する DNS プロバイダを一方は AWS Route53、他方は CloudFlare としており、どちらも ACME DNS-01 チャレンジを行うよう証明書ストア(CertStore.nsf)に「DNS プロバイダアカウント」文書と「DNS プロバイダ設定」文書を作成済みです。DNS プロバイダも異なる複数のドメインを一つのTLS証明書文書で一元管理できるなんて素晴らしいことです。

そして「TLS証明書のエクスポート」というボタンが表示されました。このボタンをクリックします。

エクスポートできる形式は、PKCS12 と PEM がサポートされていました。試しに PEM 形式でファイルを出力してみます。

出力したファイルをテキストエディタで開いてみると、暗号化された秘密鍵と証明書のチェーンが入っていました。

このファイルを OpenSSL コマンドで確認します。※OpenSSLは別途インストール必要

まずは秘密鍵です。アルゴリズムに ECDSA(楕円曲線暗号)を指定しているので、コマンドを「openssl ec -text -noout -in ファイル名」とします(※ec を rsa としてしまうと "Not an RSA key" と言われました)。コマンドを投入するとパスフレーズを聞かれますので、エクスポートした時に指定したパスワードをタイプします。

次に証明書です。コマンドは「openssl x509 -text -noout -in ファイル名」とします。こちらはパスワードを聞かれません。

上のコマンドの結果のうち SAN(サブジェクト代替名) だけ拡大したのが次のスクショです。 

ワイルドカードで2つのドメインが追加されています。

ファイルに問題は無いように見えますので、ひとまずエクスポートは完了です。


さて実際の運用を想像すると、CertMgr が定期的に更新するTLS証明書を更新のたびに証明書ストアを開いて手動で PEM ファイルへエクスポートして、それを Domino 以外の Web サーバーで置換しなければならないのかな?思うと、証明書が一つになって期限切れの管理が多少楽になるとは言え、もっと簡単にしたいと思います。

証明書ストア(CertStore.nsf)には、エクスポートの操作を実行するときに呼び出される「ImportExport」という LotusScript のスクリプトライブラリがあり、この中にあるファンクションから API をコールしてファイルへのエクスポートを行っていました。
もし TLS証明書をエクスポートするエージェントを作りたい場合にはこの「ImportExport」が参考になりそうです。

とは言え、証明書ファイルを Domino 以外のサーバーへコピーして証明書を置換できてもそれを反映するためにサーバーを再起動しないといけないとかありそうですから、ケースバイケースで考えないとだめですね。

【2022/3/3 追記】
TLS証明書文書の「アクセスできるサーバー」という項目は、自Dominoドメインのサーバーだけ選択が可能ですし、他Dominoドメインのサーバーをタイプすると「CertStore: Cannot get public key for server」とメッセージを吐いてエラーになります。他のDominoドメインのサーバーとCertStore.nsfを複製しつつTLS証明書を共有できるかどうかをメーカーサポートへ確認したところ、CertMgr は ドメイン内の証明書を管理する仕組みであるため、基本的にはドメインごとにレプリカを管理することになる、と回答がありました。TLS証明書を他Dominoドメインでインポートするか、他ドメインはワイルドカードにしない、といった運用になりそうです。CertStore.nsfが他Dominoドメインと共有できるようになるといいですね。

0 件のコメント:

コメントを投稿