Azure - Constructing X509Certificate2 from base64 in Azure Function results in error: The specified network password is not correct

Azure - Constructing X509Certificate2 from base64 in Azure Function results in error: The specified network password is not correct

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

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

certificate = new X509Certificate2(certBytes, pass, X509KeyStorageFlags.MachineKeySet);

这里使用的 X509KeyStorageFlags 是由其他几个已回答的问题建议的。

此构造函数的结果始终是以下错误: The specified network password is not correct.

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

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

有谁知道为什么这段代码在 Azure 函数中的行为与 运行 在本地的行为不同?

输入密码 null 可能有效。使用 Key Vault 证书,我发现它可以作为 X509Certificate2 对象加载,至少在 self-signed.

时是这样

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

你可能会幸运地使用 EphemeralKeySet 标志,因为它说“不要将密钥保存到磁盘”,这应该可以避免这个问题。如果不行,请尝试 EphemeralKeySet | MachineKeySet,这可能会避免“没有配置文件”以及缺少权限(因为它从未真正尝试创建文件)。