Azure Key Vault に証明書をインポート、Key Vault 証明書として格納することが可能ですが、ドキュメントにもあるとおり、証明書のファイル形式が .pfx と .pem のみ (証明書 + 秘密鍵) となっています。
重要
Azure Key Vault でサポートされている証明書の形式は PFX と PEM です。
- .pem ファイル形式には、1 つまたは複数の X509 証明書ファイルが含まれています。
- .pfx ファイル形式は、サーバー証明書 (ドメイン用に発行) や一致する秘密キーなどの複数の暗号化オブジェクトを 1 つのファイルに格納するためのアーカイブ ファイル形式で、必要に応じて中間 CA を含めることができます。
インポートするための自己署名証明書を OpenSSL で作成する際に色々と手間取ったので、備忘録としてまとめてみました。
OpenSSL を用いた自己署名証明書の作成、および Key Vault 証明書のインポート手順例
ここでは、証明書ファイルのダウンロード、アップロードの手間を省くために Azure Cloud Shell (Bash, Az モジュール) 上でコマンドを実行していきます。
※OpenSSL のバージョンは 1.1.1d (2021/06/10 時点、Azure Cloud Shell 上で確認) です。
なお個人的には .pem 形式よりも .pfx 形式のほうがインポートしやすかったです。
自己証明書の作成
- 以下のコマンドを実行して、秘密鍵を作成します。
openssl genrsa 2048 > selfsignedcert.key
- 以下のコマンドを実行して、CSR (証明書署名要求) を作成します。
openssl req -new -key selfsignedcert.key -subj "/CN=Self Cert" > selfsignedcert.csr
- 以下のコマンドを実行して、自己署名証明書 (.crt) を作成します。
openssl x509 -req -in selfsignedcert.csr -signkey selfsignedcert.key -days 365 -out selfsignedcert.crt
.pem 形式
- 以下のコマンドを実行して、自己署名証明書と秘密鍵を 1 つの .pem 形式のファイルに纏めます。
この時、秘密鍵を PKCS#8 でエンコードかつ暗号化しない形で格納するのがポイントです。openssl x509 -in selfsignedcert.crt > selfsignedcert.pem openssl pkcs8 -topk8 -nocrypt -in selfsignedcert.key >> selfsignedcert.pem
.pfx 形式
- 以下のコマンドを実行して、自己署名証明書と秘密鍵から PKCS#12 形式 (.pfx) のファイルに纏めます。
※ファイルにアクセスるためのパスワードを聞かれますが、面倒なのでここでは空 (Enter キー押下) としています。openssl pkcs12 -export -inkey selfsignedcert.key -in selfsignedcert.crt -out selfsignedcert.pfx
Key Vault 証明書へのインポート
.pem 形式
- 以下のコマンドを実行して、先の手順で作成した .pem 形式のファイルを Key Vault 証明書にインポート (Key Vault 証明書リソース名 : selfsignedcert.pem) します。
az keyvault certificate import --file 'selfsignedcert.pem' --name 'selfsignedcert-pem' --vault-name 'OpenSSL-KeyVault'
この例にある OpenSSL-KeyVault は Key Vault 証明書を格納する Key Vault コンテナー名となります。インポートする環境に合わせて、この値は変更してください。
- 以下のコマンドを実行して、インポートした証明書の内容を表示します。
az keyvault certificate show --name 'selfsignedcert-pem' --vault-name 'OpenSSL-KeyVault'
この例にある OpenSSL-KeyVault は Key Vault 証明書を格納する Key Vault コンテナー名となります。インポートする環境に合わせて、この値は変更してください。
.pfx 形式
- 以下のコマンドを実行して、先の手順で作成した .pem 形式のファイルを Key Vault 証明書にインポート (Key Vault 証明書リソース名 : selfsignedcert.pem) します。
az keyvault certificate import --file 'selfsignedcert.pfx' --name 'selfsignedcert-pfx' --vault-name 'OpenSSL-KeyVault'
この例にある OpenSSL-KeyVault は Key Vault 証明書を格納する Key Vault コンテナー名となります。インポートする環境に合わせて、この値は変更してください。
- 以下のコマンドを実行して、インポートした証明書の内容を表示します。
az keyvault certificate show --name 'selfsignedcert-pfx' --vault-name 'OpenSSL-KeyVault'
この例にある OpenSSL-KeyVault は Key Vault 証明書を格納する Key Vault コンテナー名となります。インポートする環境に合わせて、この値は変更してください。
補足 : .pem のフォーマット形式について
.pem ファイルを作成する際、単に証明書ファイルと秘密鍵ファイルを結合しただけだと、以下のエラーが表示され、インポートすることができません。
The specified PEM X.509 certificate content is in an unexpected format. Please check if certificate is in valid PEM format.
エラーの内容としては有効な PEM フォーマットではないことを示していますが、Azure Key Vault がいうところの PEM フォーマットとは、「PEM でエンコードされた単一の証明書と、PKCS#8 でエンコードされた暗号化されていないキー」とのことで、一応ドキュメントにも記載されています。
ただ、この内容がチュートリアルのドキュメントに記載がないため、不具合なんじゃないかと疑われ github の issue としても挙げられているほど、つまづく内容となっている (自分もハマった) ので注意したいところです。
何度やってもインポートできずかなりハマったので、当時はワ○ップ!案件かな?と思ってしまった (
- Azure KeyVault certificates documention says .pem import is supported, but it appears to not be. · Issue #23558 · MicrosoftDocs/azure-docs
https://github.com/MicrosoftDocs/azure-docs/issues/23558
補足 : インポートした証明書の発行ポリシー
参考サイト
Microsoft Azure
OpenSSL
- OpenSSL
https://www.openssl.org/ - OpenSSL commands
https://www.openssl.org/docs/man1.1.1/man1/