OpenSSL で作成した自己署名証明書を Key Vault 証明書にインポートする

スポンサーリンク

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 形式のほうがインポートしやすかったです。

自己証明書の作成

  1. 以下のコマンドを実行して、秘密鍵を作成します。
     openssl genrsa 2048 > selfsignedcert.key
  2. 以下のコマンドを実行して、CSR (証明書署名要求) を作成します。
     openssl req -new -key selfsignedcert.key -subj "/CN=Self Cert" > selfsignedcert.csr
  3. 以下のコマンドを実行して、自己署名証明書 (.crt) を作成します。
     openssl x509 -req -in selfsignedcert.csr -signkey selfsignedcert.key -days 365 -out selfsignedcert.crt

.pem 形式

  1. 以下のコマンドを実行して、自己署名証明書と秘密鍵を 1 つの .pem 形式のファイルに纏めます。
    この時、秘密鍵を PKCS#8 でエンコードかつ暗号化しない形で格納するのがポイントです。

    openssl x509 -in selfsignedcert.crt > selfsignedcert.pem
    openssl pkcs8 -topk8 -nocrypt -in selfsignedcert.key >> selfsignedcert.pem
    

.pfx 形式

  1. 以下のコマンドを実行して、自己署名証明書と秘密鍵から PKCS#12 形式 (.pfx) のファイルに纏めます。
    ※ファイルにアクセスるためのパスワードを聞かれますが、面倒なのでここでは空 (Enter キー押下) としています。

     openssl pkcs12 -export -inkey selfsignedcert.key -in selfsignedcert.crt -out selfsignedcert.pfx

Key Vault 証明書へのインポート

.pem 形式

  1. 以下のコマンドを実行して、先の手順で作成した .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 コンテナー名となります。インポートする環境に合わせて、この値は変更してください。

  2. 以下のコマンドを実行して、インポートした証明書の内容を表示します。
     az keyvault certificate show --name 'selfsignedcert-pem' --vault-name 'OpenSSL-KeyVault'

    この例にある OpenSSL-KeyVault は Key Vault 証明書を格納する Key Vault コンテナー名となります。インポートする環境に合わせて、この値は変更してください。

.pfx 形式

  1. 以下のコマンドを実行して、先の手順で作成した .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 コンテナー名となります。インポートする環境に合わせて、この値は変更してください。

  2. 以下のコマンドを実行して、インポートした証明書の内容を表示します。
     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 としても挙げられているほど、つまづく内容となっている (自分もハマった) ので注意したいところです。

何度やってもインポートできずかなりハマったので、当時はワ○ップ!案件かな?と思ってしまった (

補足 : インポートした証明書の発行ポリシー

参考サイト

Microsoft Azure

OpenSSL

Azure Key VaultOpenSSL

コメント

タイトルとURLをコピーしました