我在Azure App Services上有一个简单的ASPNET-Core 2 Web应用程序。当我尝试加载pfx文件时,出现以下错误:
WindowsCryptographicException:系统找不到指定的文件 Internal.Cryptography.Pal.CertificatePal.FilterPFXStore(Byte [] rawData,SafePasswordHandle password,PfxCertStoreFlags pfxCertStoreFlags)
我正在尝试加载pfx
文件夹中存在的wwwroot
文件。
问题是,我已经证明pfx文件存在。
然后我尝试通过以下两种方式加载X509证书:
clientCertificate = new X509Certificate2(certificateByteArrayData, pfxPassword);
和
clientCertificate = new X509Certificate2(filePath, pfxPassword);
如果我的密码错误,我会收到正确的密码错误。
但是(我认为是)合法的路径+密码或加载的字节+密码,我在上面得到了这个错误。
这就像证书试图在服务器上做一些奇怪的admin-type-thingy并且没有权限?我不明白,因为我有证书,我只是想用它?
我知道还有其他方法可以执行此操作with Loading SSL Certs或使用Azure Vault或other people have found similar problems但与'用户商店'等相关,而在这里我认为这与它无关?
答案 0 :(得分:1)
看起来我必须添加一个额外的参数来说明使用机器存储。
// Byte array.
var clientCertificate = new X509Certificate2(certificateData,
pfxPassword,
X509KeyStorageFlags.MachineKeySet);
// File name
var clientCertificate = new X509Certificate2(pfxFileNameAndPath,
pfxPassword,
X509KeyStorageFlags.MachineKeySet);
This SO answer基本上建议了答案
即使您从磁盘读取证书并将其存储在对象中,私钥仍存储在Microsoft Cryptographic API加密服务提供程序密钥数据库中。在托管服务器上,ASP.NET进程无权访问用户存储。
轰!也就是说,我仍然不明白为什么它会尝试访问一些商店,因为我提供密码和文件。
/我耸耸肩