私は同じことを行う2つの方法を持っていますが、Azureは機能する方法を廃止し、もう1つの方法は機能しません。
機能するが非推奨のアプローチ:
PFXをAzure Key VaultSecretsに保存します。 (シークレットを作成すると、この機能が廃止されたことを示す警告が表示されます)
次のコードを使用して取得し、証明書を作成します。
SecretBundle secret = await keyVaultClient.GetSecretAsync(keyVaultUrl, "MyCert-Secret");
X509Certificate2Collection exportedCertCollection = new X509Certificate2Collection();
exportedCertCollection.Import(Convert.FromBase64String(secret.Value));
X509Certificate2 certFromSecret = exportedCertCollection.Cast<X509Certificate2>().Single(s => s.HasPrivateKey);
クレジット この答え
この証明書を使用してホストし、アプリケーションに正常にアクセスできます。
機能しないアプローチですが、私は次のように使用する必要があります:
証明書をAzure Key Vaultに保存しますCertificates
次のコードを使用してそれを取得し、X509Certificate2を作成します。
CertificateBundle certificateBundle = await keyVaultClient.GetCertificateAsync(keyVaultUrl, "MyCert-Certificate");
X509Certificate2 certFromCertificate = new X509Certificate2(certificateBundle.Cer);
このアプローチの問題は、証明書に秘密鍵が含まれていないことです。つまり、certFromCertificate.HasPrivateKeyがfalseです。
私の質問
CertFromSecretにPrivateKeyがあるのに、certFromCertificateにはないのはなぜですか?
KeyVaultから証明書を取得するには、X509Certificate2オブジェクトを作成して、UseHttpsを使用してアプリケーションをKestrelでホストします。
私はこのトピックに不慣れなので、どんな助けにも感謝します。
@Adrianの2番目の部分 answer は、Azure KV証明書に関する概念を非常によく説明しています。プライベートキーを含む完全な証明書を取得するために、コードを以下のように変更しました。
SecretBundle secret = await kv.GetSecretAsync(keyVaultUrl, certName);
X509Certificate2 certificate = new X509Certificate2(Convert.FromBase64String(secret.Value));
コツは、GetCertificateAsyncの代わりにGetSecretAsyncを使用することでした。 Adrianの SO answer を参照して、秘密キーを含む完全な証明書を取得するためにシークレットを使用する必要がある理由を確認してください。