Azure App Service无法从wwwroot文件系统加载pfx证书

时间:2018-05-28 14:48:21

标签: azure ssl asp.net-core certificate pfx

我在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但与'用户商店'等相关,而在这里我认为这与它无关?

1 个答案:

答案 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进程无权访问用户存储。

轰!也就是说,我仍然不明白为什么它会尝试访问一些商店,因为我提供密码和文件。

/我耸耸肩