我使用下面的ASP.NET代码从文件夹中加载pfx文件
var certificatePath = $"{HttpContext.Current.Server.MapPath("~")}{certFolderName}\\{certFileName}";
return new X509Certificate2(certificatePath, certPassword, X509KeyStorageFlags.MachineKeySet);
这段代码在本地IIS中运行良好。但是,相同的代码在移动到我们的QA服务器时,会抛出如下所示的“拒绝访问”错误。
我看了很多论坛,知道这主要是访问文件夹C:\ProgramData\Microsoft\Crypto\RSA\MachineKey时的权限问题。我已经在我们的服务器上验证了对该文件夹的访问权限,一切正常。“Everyone”用户具有读写权限。因此理想情况下不应该出现任何访问被拒绝的错误。我甚至明确地为应用程序池的身份提供了完全控制权限,但仍然不起作用。我正在尝试了解还有什么可能导致访问被拒绝的问题。
1条答案
按热度按时间blmhpbnm1#
返回新的X509证书2(证书路径,证书密码,X509密钥存储标志.机器密钥集);
问题出在最后一个参数。您的应用程序(应用程序集区识别)没有存取本机计算机存放区的权限。您应该使用目前使用者存放区(用于永久性密钥储存),如果密钥必须只在执行阶段存取,则应该使用暂时性存放区。