我正在开发一个Azure函数,该函数需要从受保护的Base 64字符串中加载证书。证书受密钥保护。证书和密码存储在Azure密钥保管库中。
当我尝试从功能加载证书时,在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)
正如上一篇文章结尾所提到的,我尝试使用 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中是否有任何简单解决方法,可以将证书作为文件存储在功能上?
答案 0 :(得分: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)