无法在 Azure 函数中加载证书

Unable to load a certificate in Azure Function

我正在开发需要从安全的 Base 64 字符串加载证书的 Azure 函数。证书受密钥保护。证书和密码存储在 Azure Key Vault 中。

当我尝试从函数加载证书时,我在 v1 和 v2 函数中都遇到了错误。

这是用于加载证书的代码:

var certificate = new X509Certificate2(Convert.FromBase64String(certificateBase64), certificatePassword)

使用此 .Net 代码,我遇到了一个可以在本地重现的奇怪问题。该问题与 .Net 4.6.1 有关。在 .Net Core 2.0 中,它在本地运行良好(在 Azure Function CLI 中),但我遇到了一个关于找不到文件的奇怪问题 (https://github.com/dotnet/corefx/issues/11042)

正如前面 post 最后提到的,我尝试了 X509KeyStorageFlags.EphemeralKeySet 标志。

var certificate = new X509Certificate2(Convert.FromBase64String(certificateBase64), certificatePassword, X509KeyStorageFlags.EphemeralKeySet)

该标志尚不可用于 .Net Core 2 (https://github.com/dotnet/corefx/issues/24454),在 .Net 4.6.1 中也不可用,Azure Functions 使用的框架。

有没有办法强制 Azure Function v1 使用 Net Framework? .Net Core 2.0 中是否有任何简单 解决方法,而不是将证书作为文件存储在函数上?

经过多次尝试,我找到了解决办法。必须使用标志 X509KeyStorageFlags.MachineKeySet。它适用于 Function App V1 (.Net 4.6.1) 和 Function App V2 (.Net Core 2) :

var certificate = new X509Certificate2(Convert.FromBase64String(certificateBase64), certificatePassword, X509KeyStorageFlags.MachineKeySet)