Azure 应用服务无法从 wwwroot 文件系统加载 pfx 证书

Pur*_*ome 4 ssl certificate azure pfx asp.net-core

我在 Azure 应用服务上有一个简单的 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);
Run Code Online (Sandbox Code Playgroud)

clientCertificate = new X509Certificate2(filePath, pfxPassword);
Run Code Online (Sandbox Code Playgroud)

如果我有一个错误的密码,我会收到一个正确的错误密码异常。

但是使用(我认为是)合法路径 + 密码或加载的字节 + 密码,我得到了上面的错误。

这就像证书试图在服务器上做一些奇怪的管理员类型的事情并且没有权限?我不明白,因为我在那里有证书,我只想使用它?

我知道还有其他方法可以通过加载 SSL 证书或使用 Azure Vault 或其他人发现类似问题但与“用户存储”等相关,而在这里我认为这与此无关?

Pur*_*ome 6

看起来我不得不添加一个额外的参数来说明使用机器存储。

// Byte array.
var clientCertificate = new X509Certificate2(certificateData, 
                                pfxPassword, 
                                X509KeyStorageFlags.MachineKeySet);

// File name
var clientCertificate = new X509Certificate2(pfxFileNameAndPath, 
                                pfxPassword, 
                                X509KeyStorageFlags.MachineKeySet);
Run Code Online (Sandbox Code Playgroud)

这个 SO 答案基本上建议了答案

即使您从磁盘读取证书并将其存储在对象中,私钥仍存储在 Microsoft Cryptographic API Cryptographic Service Provider 密钥数据库中。在托管服务器上,ASP.NET 进程无权访问用户存储。

繁荣!也就是说,考虑到我提供了密码和文件,我仍然不明白为什么它会尝试访问某个商店。

/我耸耸肩