Azure-在Azure函数中从base64构造X509Certificate2会导致错误:指定的网络密码不正确

Azure-在Azure函数中从base64构造X509Certificate2会导致错误:指定的网络密码不正确,azure,certificate,azure-functions,x509certificate2,pfx,Azure,Certificate,Azure Functions,X509certificate2,Pfx,我正在尝试创建一个Azure函数,该函数将调用需要使用证书的SOAP API。我有一个.PFX证书(另存为base64)和匹配的密码。它们都作为机密保存在Azure Key Vault中,我验证了它们的检索结果 在我的Azure函数(.NET Core 3.1)中,我使用以下构造函数创建X509Certificate2对象: certificate = new X509Certificate2(certBytes, pass, X509KeyStorageFlags.MachineKeySet)

我正在尝试创建一个Azure函数,该函数将调用需要使用证书的SOAP API。我有一个.PFX证书(另存为base64)和匹配的密码。它们都作为机密保存在Azure Key Vault中,我验证了它们的检索结果

在我的Azure函数(.NET Core 3.1)中,我使用以下构造函数创建X509Certificate2对象:

certificate = new X509Certificate2(certBytes, pass, X509KeyStorageFlags.MachineKeySet);
这里使用的X509KeyStrageFlags是由这里回答的几个其他问题建议的

此构造函数的结果始终为以下错误:
指定的网络密码不正确。

我尝试在本地执行相同的操作,在这里证书被正确加载,我可以获得关于颁发者的信息,等等

其他存储标志(如MachineKeySet+PersistKeySet+Exportable)没有什么区别,并且将PFX加载为文件而不是base64会产生相同的错误


有人知道为什么此代码在Azure函数中的行为与在本地运行不同吗?

可能需要传递密码的
null
。对于密钥保管库证书,我发现它可以作为X509Certificate2对象加载,至少在自签名时是这样。

Azure函数没有加载用户配置文件,因此没有地方保存私钥。或者,对于
MachineKeySet
来说,可能是您没有管理员权限,因此无法创建私钥文件。。。不知何故,这个错误被误解了


您可能很幸运地使用了
EphemeralKeySet
标志,因为该标志表示“不要将密钥保存到磁盘”,这应该可以避免问题。如果这不起作用,请尝试
EphemeralKeySet | MachineKeySet
,这可能会避免“没有配置文件”和缺乏权限(因为它从未实际尝试创建文件)。

我需要在我的帖子中澄清这一点,但我将证书作为base64存储在密钥库中,因此,在构造X509Certificate2对象时,我需要密码。它以这种方式存储的原因是Azure Key Vault不接受证书存储中的pfx(这本身似乎是个问题)。虽然它不适用于API开发人员颁发的证书,但它确实适用于另一个结合这些标志的证书。因此,虽然我仍然不确定为什么原始证书在本地工作,但在Azure上不工作,但错误消息至少已经消失了。谢谢