我有两种方法可以做同一件事情,但Azure已弃用了可以工作的那个方法,而另一个方法则不起作用。
仍然有效但已弃用的方法:
我将我的PFX存储在Azure Key Vault Secrets中。(当我创建密钥时,我会看到一个警告说明该功能已被弃用)
并使用以下代码检索它以创建我的证书:
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密钥保管库证书中,并使用以下代码检索它并创建X509Certificate2:
CertificateBundle certificateBundle = await keyVaultClient.GetCertificateAsync(keyVaultUrl, "MyCert-Certificate");
X509Certificate2 certFromCertificate = new X509Certificate2(certificateBundle.Cer);
这种方法的问题在于证书不包含私钥,即 certFromCertificate.HasPrivateKey 为 false。
我的问题
为什么 certFromSecret 具有 PrivateKey,而 certFromCertificate 没有?
我该如何从密钥保管库中检索证书,在那里我可以创建一个 X509Certificate2 对象以在 Kestrel 中使用 UseHttps 主机我的应用程序。