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



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

在我的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,并没有产生任何影响,并且不是以base64而是以文件的形式加载PFX会产生相同的错误。

有人知道为什么与在本地运行相比,此代码在Azure Function中的表现不同吗?

Azure函数没有加载用户配置文件,因此无法保存私钥。或者,对于MachineKeySet,可能是因为您没有管理权限,所以无法创建私钥文件。。。不知怎么的,这个错误被误解了。

EphemeralKeySet标志可能很幸运,因为上面写着";"不要将密钥保存到磁盘";,这应该可以避免这个问题。如果这不起作用,请尝试EphemeralKeySet | MachineKeySet,这可能会避免";没有配置文件";以及缺乏权限(因为它从未真正尝试创建文件(。

传递密码的null可能会起作用。有了密钥库证书,我发现它可以作为X509Certificate2对象加载,至少在自签名时是这样。

对于任何看到这一点的人来说,我也遇到了与外部供应商提供的证书完全相同的问题。

问题是证书是使用AES256-SHA256加密导出的,无论出于何种原因,Azure Functions v4都无法处理此问题。由于密码正确的,因此错误消息毫无帮助。

解决方案?将证书导入本地证书存储,然后使用TripleDES-SHA1导出。之后应该可以正常工作。