使用X509Certificate2获取PrivateKey会导致CryptographicException“指定了无效的提供者类型". [英] Using X509Certificate2 to get PrivateKey causes CryptographicException "Invalid provider type specified"
本文介绍了使用X509Certificate2获取PrivateKey会导致CryptographicException“指定了无效的提供者类型".的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
所有人
我正在开发一个Web应用程序,该应用程序使用X509Certificate2从认证文件中获取私钥.代码段如下所示:
public static RSACryptoServiceProvider GetSignProviderFromPfx()
{
var strFileName = "c:\cer\mycerfile.pfx";
var strPassword = "000000";
X509Certificate2 pc = new X509Certificate2(strFileName, strPassword, X509KeyStorageFlags.MachineKeySet);
var ThePivateKey = pc.PrivateKey;
return (RSACryptoServiceProvider)ThePivateKey;
}
但是语句pc.Privatekey导致System.Security.Cryptography.CryptographicException指定了无效的提供程序类型".我确定认证文件没有问题,它确实具有私钥.并且属性pc.HasPrivateKey也返回true.
测试环境是VS2013,窗口7.
我还尝试了以下操作:
a.我在VS2013中使用iis express对其进行了调试,出现了问题.
b.我在与我的环境相同的另一台计算机上对其进行了调试,该问题也发生了.
c.我将该应用程序发布到了在Windows Web Server 2008 R2上运行iis的服务器上,它运行良好.
d.我已将该应用程序发布到寡妇azure网站上,也很好用.因此,我想代码段没有问题.引发异常的主要原因是运行环境可能存在一些问题.我检查并比较了在不同环境中对认证文件的读写权限,它们都是相同的.
有人可以帮忙吗?
谢谢.
解决方案
我遇到了同样的问题,这就是我要解决的问题.希望这也会对您有帮助.
我们必须在应用程序池高级设置中将加载用户配置文件"设置为True
您也可以在我认为的web.config中进行设置.
查看全文