既然没有人回答过这个问题,我会尽力去做 . 如果我错了请纠正我,但我认为问题是以下代码行:
new X509Certificate2(Convert.FromBase64String(cerStr), string.Empty, X509KeyStorageFlags.MachineKeySet)
此行代码将尝试将新证书添加到虚拟机的证书存储中 . 运行时使用的所有证书都需要托管在某个商店中 . 这不是一个好主意,因为托管应用程序服务的虚拟机的证书存储区不应该存储任何内容,它是您在使用应用程序服务时不关心的基础结构的一部分 .
您需要做的是通过天蓝色门户上传证书(如果它们尚未存在) . 为此,我最终重新使用了已经存在的SSL证书 . 完成后,您可以在代码中检索该证书 . 您需要在Azure门户中的“应用程序设置”键下为您的应用程序服务添加一个新的应用程序设置,名为WEBSITE_LOAD_CERTIFICATES . 该值应该是证书的指纹 .
要检索证书,您应该执行以下操作:
public async Task GetCertificate(string certificateThumbprint)
{
var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
var cert = store.Certificates.OfType()
.FirstOrDefault(x => x.Thumbprint == certificateThumbprint);
store.Close();
return cert;
}
您可以使用azure resource explorer导航订阅来获取证书的指纹https://resources.azure.com/