発行された証明書の使い方
(ケース別)
ACME Conductor で発行された証明書を,実際のサービスやサーバで使うための解説です. まず「証明書をどこで使うか」を選び,該当するケースの節へ進んでください.
読者は 2 種類を想定しています.
- 登録担当者(事務担当者): 仕組みを理解し,サーバの管理者や業者に正しい依頼を出すために読みます.
- サーバの管理者: 自分のサーバに証明書を入れる具体的な手順を知るために読みます.
証明書を発行するまでの手順は UPKI 証明書の発行手順(登録担当者向け)にあります.設定や仕組みの詳細は Runner 運用ガイドにあります.
証明書をどこで使いますか?
| 証明書を使う場所 | 該当するケース |
|---|---|
| Azure App Service,Application Gateway,Front Door,API Management | ケース A |
| Azure 上の仮想マシン,または Linux サーバ(nginx,Apache など) | ケース B |
| Windows Server(IIS など) | ケース C |
| 手動でしか証明書を入れられない機器,ロードバランサ,外部のサービス | ケース D |
| 他の部署や業者に証明書を渡す | ケース E |
迷ったら,利用者に「そのホスト名のサイトは,どこで動いていますか」と聞きます.どのケースでも,秘密鍵の扱いには秘密鍵の取り扱いを守ります.
基本の知識
どこに保存されるか
発行された証明書と秘密鍵は,Azure の Key Vault に,証明書のオブジェクトとして保存されます.
- オブジェクトの名前は,ホスト名から機械的に決まります.
.と_は-に変わり,末尾に 16 桁の英数字(16 進数)が付きます.たとえばwiki.example.ac.jpはwiki-example-ac-jp-<16 桁の 16 進数>になります. - 実際の名前は,ACME Conductor の証明書の詳細ページ(または実行履歴の実行の詳細)にある「保存先のオブジェクト名」で分かります.推測せず,画面の値をコピーして使ってください.
- Key Vault の名前(
<kv>)は,環境によって違います.デプロイ担当者に聞いてください.
更新のたびに「新しい版」ができる
証明書が更新されると,同じ名前の下に 新しい版(バージョン) が追加されます.古い版は消えずに読み取れる状態で残ります.したがって,利用側は「名前だけで指定して,常に最新の版を使う」ようにしておけば,更新に自動で追従できます.バージョンを固定して指定すると,更新後も古い証明書を使い続けてしまいます.有効期間は 89 日で,発行から約 59 日で更新されます.
PEM と PFX(pkcs12)の違い
Key Vault に保存される証明書には,2 つの形式があります.
| 形式 | 中身 | 向いている使い方 |
|---|---|---|
| PEM | 証明書,中間証明書,秘密鍵を 1 つのテキストにしたもの | nginx や Apache など,自分でファイルを読むソフトウェア |
| PFX(PKCS #12) | 同じものをまとめたバイナリのファイル(パスワードなし) | Azure の組み込みの連携(App Service など),Windows |
どちらの形式で保存されるかは,証明書の登録時に選ぶ 保存先(store) の設定で決まります.デプロイ担当者に「この証明書は PEM ですか,PFX ですか」と確認してください.Azure の App Service,Application Gateway,Front Door,API Management のような組み込みの連携は PFX を必要とし,Front Door と API Management はさらに RSA の鍵(rsa2048 以上)を必要とします.これは,Runner 運用ガイドに記載された内容です.形式の切り替えは,Runner 側で保存先の設定を変え,次の実行で証明書が再発行されることで反映されます.登録担当者が単独で切り替えることはできません.
読み取りに必要な権限
秘密鍵は Key Vault の「シークレット」として読み出されます.読み取るには,Key Vault に対する secrets/get の権限(Azure RBAC の組み込みロールでは Key Vault Secrets User)が必要です.この権限を持つ人やサービスは,秘密鍵を読めることになるので,本当に必要なものだけに付与します.付与の可否と手続きはデプロイ担当者・Key Vault の管理者に相談してください.
ケース A: Azure の Web サービス
向いている場面: Azure の Web サービスで,独自ドメインの HTTPS を提供するとき.更新の追従を自動にできるので,最も手間がかかりません.
必要な権限・準備
- 証明書が PFX(pkcs12) で保存されていること.Front Door と API Management は RSA の鍵も必要です.デプロイ担当者に確認します.
- そのサービスが Key Vault から証明書を読めるように,Key Vault の
secrets/get(Key Vault Secrets User)を与える.与える相手はサービスによって違います(Application Gateway と Front Door は割り当てたマネージド ID,App Service は既定では App Service のリソースプロバイダの ID).ロール名やファイアウォールの設定など,細かい要件は各サービスの公式ドキュメントで確認してください.
手順の概要
- Azure ポータルで,対象のサービスの TLS/SSL(証明書)の設定を開きます.
- 「Key Vault から証明書を追加(インポート)」を選び,Key Vault と証明書の名前を指定します.
- 証明書のバージョンは 指定しない(「最新」を選ぶ,または版のない識別子を使う).Application Gateway では,版のない識別子は
https://<kv>.vault.azure.net/secrets/<証明書名>の形です. - ホスト名(カスタムドメイン)に証明書を割り当てます.
更新時の扱い: 版を指定しなければ,新しい版が自動で取り込まれます.反映まで時間がかかることがあります(サービスごとに,数時間から 1 日程度).正確な間隔は,各サービスの公式ドキュメントで確認してください.
注意
- PEM の形式で保存されている場合,Application Gateway は受け付けません.形式の変更は,デプロイ担当者に頼みます.
- 名前(ホスト名)の DNS が,そのサービスを指していること.証明書とは別の作業です.
ケース B: Linux サーバ
向いている場面: Azure の仮想マシン,またはオンプレミスの Linux サーバで,自分で証明書ファイルを設定するとき.
必要な権限・準備
- 証明書が PEM で保存されているのが最も簡単です(PFX でも変換できます).
- サーバに マネージド ID(Azure の仮想マシンなら,システム割り当て ID を有効にする.オンプレミスのサーバなら Azure Arc を使う)を持たせ,その ID に Key Vault の Key Vault Secrets User を付与します.人のアカウントで取得する場合は,その人に同じ権限が要ります.
- Azure CLI(
az)をサーバに入れておきます.
手順の概要
- サインインします(マネージド ID の場合).
az login --identity - 証明書(秘密鍵つき)を取得します.PEM の場合:
PFX(pkcs12)の場合はaz keyvault secret download \ --vault-name <kv> --name <証明書のオブジェクト名> \ --file cert.pem --encoding utf-8--encoding base64を付けます.できたファイルが PFX です.
ファイルに書かずに画面へ出すだけならaz keyvault secret download \ --vault-name <kv> --name <証明書のオブジェクト名> \ --file cert.pfx --encoding base64az keyvault secret show ...ですが,秘密鍵が画面に出るので,通常は使いません. - PEM を,証明書チェーン(fullchain)と秘密鍵に分けます.
PFX しかない場合は,PEM に変換します(パスワードは空です).# 証明書と中間証明書(先頭が自分の証明書) sed -n '/BEGIN CERTIFICATE/,/END CERTIFICATE/p' cert.pem > fullchain.pem # 秘密鍵 openssl pkey -in cert.pem -out privkey.pem
Key Vault が返す PFX は 3DES と SHA-1 の MAC の形式で,OpenSSL 3 系でもopenssl pkcs12 -in cert.pfx -passin pass: -nodes -out cert.pem-legacyなしで読めます. - ファイルを配置し,権限を絞ります.
秘密鍵は 600(所有者だけが読める)にし,Web サーバを動かすユーザ以外に読ませないようにします.sudo install -m 644 fullchain.pem /etc/ssl/<ホスト名>/fullchain.pem sudo install -m 600 privkey.pem /etc/ssl/<ホスト名>/privkey.pem rm -f cert.pem cert.pfx privkey.pem fullchain.pem # 作業用のコピーは消す - nginx(
ssl_certificateとssl_certificate_key)や Apache(SSLCertificateFileとSSLCertificateKeyFile)に,このファイルを設定し,設定を再読み込みします(sudo systemctl reload nginxなど).
更新時の扱い: 証明書は約 59 日ごとに変わります.手動では続かないので,自動化します.上の手順 1 から 5 を 1 本のスクリプトにして,systemd タイマーか cron で毎日 1 回実行します.
#!/bin/sh
# 概略.実際はエラー処理と,変更があったときだけ reload する処理を足す
set -eu
umask 077 # 秘密鍵を含む一時ファイルを他のユーザに読ませない
az login --identity --output none
az keyvault secret download --vault-name <kv> --name <証明書のオブジェクト名> \
--file /tmp/cert.pem --encoding utf-8
# 分割,配置(600),一時ファイルの削除
# 新しい証明書と前回の証明書が違うときだけ reload
Azure や Azure Arc の仮想マシンでは,スクリプトを自作する代わりに,Key Vault の仮想マシン拡張機能(Linux 版と Windows 版があります)を使う方法もあります.Key Vault の証明書を仮想マシン上のファイルとして自動で更新する機能です.自動化の第一候補ですが,設定の細かい点は Microsoft の公式ドキュメントで確認してください.
注意
- スクリプトを動かす ID には,読み取りだけ(Key Vault Secrets User)を与えます.
- 更新の後に Web サーバを再読み込みしないと,古い証明書のままです.
ケース C: Windows Server
向いている場面: Windows Server の IIS などで HTTPS を提供するとき.
必要な権限・準備: 証明書を PFX の形で取得できること.PFX(pkcs12)で保存されていれば,そのまま取得できます.PEM で保存されている場合は,取得した PEM を変換します.
openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out cert.pfx
(ケース B の手順 3 で PEM を分けてから行います.パスワードの入力を求められます.そのパスワードは,インポートのときに使います.)
手順の概要
- PFX を取得します(ケース B の
az keyvault secret download ... --encoding base64を使えます). - サーバ管理者が,証明書を「ローカルコンピューター」の「個人」ストア(
LocalMachine\My)にインポートします.PowerShell の例:
(パスワード付きの PFX のときは,Import-PfxCertificate -FilePath .\cert.pfx ` -CertStoreLocation Cert:\LocalMachine\My-Passwordも指定します.) - IIS マネージャーで,対象サイトの「バインド」を開き,HTTPS のバインドに,インポートした証明書を選びます.
- 作業用に置いた PFX ファイルは,インポート後にすぐ削除します.
更新時の扱い: 約 59 日ごとに,上の作業をやり直す必要があります.手動は忘れやすいので,自動化します.Azure(または Azure Arc)の仮想マシンなら,Key Vault の仮想マシン拡張機能(Windows 版) で,証明書を自動で LocalMachine\My に反映できます.ただし IIS のバインドが新しい証明書に切り替わるかは,設定によります.公式ドキュメントで確認してください.
注意: 秘密鍵つきの PFX は,メールやチャットで送らないでください.
ケース D: 手動でしか入れられない機器
向いている場面: ロードバランサ,VPN 装置,ネットワーク機器,外部のサービスなど,管理画面から証明書ファイルをアップロードする方式の機器.
必要な権限・準備: Key Vault から証明書を取得する権限を持つ人が,ダウンロードします.PEM と PFX のどちらを受け付けるかは,機器のマニュアルで確認し,必要ならケース B・C の方法で変換します.
手順の概要
- Key Vault から証明書をダウンロードする(ケース B の
az keyvault secret download,または Azure ポータルの Key Vault の画面). - 機器の管理画面で,証明書(と,必要なら中間証明書と秘密鍵)をアップロードする.
- ダウンロードしたファイルを,作業が終わったら削除する.
更新時の扱い: 更新のたびに,手動で同じ作業を繰り返す 必要があります.証明書は約 59 日で更新され,89 日で期限が切れます.次のどちらかをしておきます.
- 更新の後に作業する日を,カレンダーに繰り返し予定として入れる(たとえば,発行から 60 日ごと).
- 機器が API や自動化に対応しているなら,スクリプトで自動化する.
注意: 期限が切れるとサイトが「安全でない」と表示されます.担当者が異動しても続けられるように,作業手順書を残してください.
ケース E: 他部署・業者に渡すとき
向いている場面: 運用を外部の業者や他部署に任せていて,その担当者が証明書をサーバに入れるとき.
必要な権限・準備・手順の概要
- 秘密鍵つきの証明書(PEM や PFX)をメールやチャットで送らない.一度送ると,誰に転送されたか分からなくなります.
- 推奨する方法は,相手に Key Vault の読み取り権限を与えることです.相手は自分でダウンロードでき,更新の後にも最新の版を取得できます.権限の付与は Key Vault の管理者(デプロイ担当者)が行うので,依頼します.付与する権限は読み取りだけ(Key Vault Secrets User)で,対象は必要な Key Vault だけに絞ります.
- どうしても Key Vault に入れられない相手には,組織が認めた安全な受け渡しの手段(暗号化された共有領域など)を使います.
- 依頼の前に,誰が承認するかを決めておきます.一般には,証明書の利用者(ホスト名の責任者)と Key Vault の管理者の承認が要ります.組織の規定を確認してください.
更新時の扱い: 相手は更新のたびに,上のケース B〜D のどれかで取得し直します.自動化してもらうのが理想です.更新の日の目安(約 59 日ごと)を伝えておきます.
注意: 権限は,契約の終了や担当者の異動のときに,忘れずに削除します.
秘密鍵の取り扱い
- 秘密鍵は,証明書と一緒に発行された 1 つだけ です.誰かに知られると,その人があなたのサイトになりすませます.
- メール,チャット,チケット,共有フォルダに置かない.
- サーバに置くときは,所有者だけが読める権限(
chmod 600)にする. - 作業用にダウンロードしたファイルは,作業が終わったらすぐ削除する.
- 秘密鍵が漏れた,または漏れたかもしれないときは,すぐにデプロイ担当者と UPKI の窓口に連絡してください.新しい証明書の発行が必要です.
- ACME Conductor 自体は,秘密鍵を保存も表示もしません.鍵は,Key Vault に直接書き込まれます.
更新されたか確かめる
更新は約 59 日ごとです.新しい証明書が実際に使われているかは,次の方法で確かめます.
- コマンド(Mac,Linux,Windows の WSL など)で,サーバが返している証明書の期限を見ます.
openssl s_client -connect <ホスト名>:443 -servername <ホスト名> </dev/null 2>/dev/null \ | openssl x509 -noout -datesnotBeforeが最近の日付で,notAfterがその約 89 日後になっていれば,新しい証明書が使われています. - ブラウザ: アドレスバーの鍵のマークをクリックして「証明書」を開き,有効期間を見ます.
- ACME Conductor の画面: 「証明書」の一覧の期限の列が更新されていれば,Key Vault の中の証明書は新しくなっています.ただし,サーバへの反映は別です.上の 2 つの方法で,サーバが返している証明書を見て確かめます.
サーバに反映されていないときは,該当するケースの「更新時の扱い」(再読み込み,インポートのやり直しなど)を見直します.