証明書の管理
証明書を安全に管理することは、すべての組織にとって難しい課題です。 秘密キーが安全に維持されていることを確める必要があります。 PetDash の Steve が気付いたとおり、証明書には有効期限があり、Web サイトのトラフィックを確実にセキュリティで保護するために、定期的に更新する必要があります。
Key Vault に証明書を追加する
Azure Key Vault で管理される X.509 ベースの証明書は、複数のソースから提供することが可能です。
まず、Azure portal で自己署名証明書を直接作成することができます。 このプロセスでは、公開キーと秘密キーのペアを作成し、独自のキーを使用して証明書に署名します。 これらの証明書は、テストと開発に使用できます。
第 2 に、X.509 証明書の署名要求 (CSR) を作成できます。 このプロセスにより、証明機関 (CA) に渡すことができる CSR と共に Key Vault で公開キーと秘密キーのペアが作成されます。 次の図に示すように、署名された X.509 証明書と保持されているキー ペアをマージして、Key Vault の証明書を完成させることができます。
- 上の図では、アプリケーションで証明書を作成しています。これは、Azure Key Vault にキーを作成すると、内部的に開始されます。
- Key Vault からアプリケーションに証明書署名要求 (CSR) が返されます。
- 選択した CA にアプリケーションから CSR を渡します。
- 選択した CA から X.509 証明書と共に応答があります。
- アプリケーションで、CA からの X.509 証明書のマージャーによって新しい証明書の作成を完了します。
この方法は、どの証明書発行者にも使用でき、CSR を直接処理するよりもセキュリティが強化されます。 秘密キーが Azure Key Vault 内に作成されて保護され、公開されることがないため、このプロセスの安全性が高くなります。
3 番目の方法として、信頼された証明書の発行者 ("統合された" CA と呼ばれます) と Key Vault を接続し、証明書を Azure Key Vault で直接作成します。 この方法では、証明機関を接続するために 1 回限りのセットアップが必要です。 その後、証明書の作成を要求することができます。Key Vault と CA との直接のやり取りによって、前述の手動での CSR 作成プロセスと同様のプロセスで、要求が処理されます。 このプロセスの詳細については、次の図を参照してください。
- 上の図では、アプリケーションで証明書を作成しています。これは、Key Vault でキーを作成すると、内部的に開始されます。
- Key Vault から CA に SSL 証明書の要求が送信されます。
- アプリケーションは、ループと待機プロセスで、証明書の完了を Key Vault にポーリングします。 証明書の作成は、Key Vault が x509 証明書を使用して CA の応答を受信したときに完了します。
- CA は、X509 SSL 証明書を使用して Key Vault の SSL 証明書の要求に応答します。
- 新しい証明書の作成が、CA に対する X509 証明書のマージャーで完了します。
この方法には、いくつかの明確な利点があります。 Key Vault は発行元 CA に接続されているため、証明書のライフサイクルを管理および監視できます。 つまり、証明書を自動的に更新し、有効期限について通知できます。また、証明書が失効しているかどうかなどのイベントを監視できます。
最後に、既存の証明書をインポートできます。これにより、既に使用している Key Vault に証明書を追加できます。 インポートした証明書は、PFX 形式または PEM 形式のいずれかで、秘密キーが含まれている必要があります。 たとえば、次の PowerShell スクリプトを使用して証明書をアップロードします。
$pfxFilePath = "C:\WebsitePrivateCertificate.pfx"
$pwd = "password-goes-here"
$flag = [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable
$pkcs12ContentType = [System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12
$collection = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2Collection
$collection.Import($pfxFilePath, $pwd, $flag)
$clearBytes = $collection.Export($pkcs12ContentType)
$fileContentEncoded = [System.Convert]::ToBase64String($clearBytes)
$secret = ConvertTo-SecureString -String $fileContentEncoded -AsPlainText –Force
$secretContentType = 'application/x-pkcs12'
# Replace the following <vault-name> and <key-name>.
Set-AzKeyVaultSecret -VaultName <vault-name> -Name <key-name> -SecretValue $secret -ContentType $secretContentType
キー コンテナーから証明書を取得する
証明書が Azure Key Vault に格納されたら、Azure portal を使用して証明書のプロパティを確認し、証明書を有効にしたり、無効にしてクライアントで使用できないようにすることができます。
Azure App Service の統合
Azure Key Vault に公開キーと秘密キーのペアの証明書を格納したら、Azure portal を使用してそれを Web アプリに簡単に関連付けることができます。
[設定] の [TLS/SSL の設定] を選択します。
[秘密キー証明書 (.pfx)] タブを選択します。
次のスクリーンショットのとおり [Key Vault 証明書のインポート] を選択します。
次に、同じサブスクリプション内に存在する必要があるコンテナーと、証明書が含まれているシークレットを選択できます。
- この証明書は、コンテンツの種類が
application/x-pkcs12
の X.509 証明書である必要があり、パスワードを設定することはできません。
- この証明書は、コンテンツの種類が
最後に、証明書が読み込まれたら、"カスタム ドメイン" を設定する必要があります。 *.azurewebsites.net
用の組み込み証明書が既に存在します。 その後、割り当てた証明書にカスタム ドメインを関連付けることができます。これにより、サーバーでブラウザーへの接続をセキュリティで保護するために、その証明書が使用されます。