大家,
我正在开发一个使用X509Certificate2从认证文件中获取私钥的Web应用程序。代码段如下所示:
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页。
我也尝试过:
一个。我用iis express在VS2013中调试了它,出现了问题。
湾我在另一台与我的环境相同的计算机上进行了调试,问题也出现了。
℃。我将应用程序发布到运行在Windows Web Server 2008 R2上的iis的服务器上,它运行良好。
d。我向widows azure网站发布了该应用程序,它也运行良好。
因此,我猜代码片段没有问题。引发异常的关键原因是运行环境可能存在一些问题。我检查并比较了不同环境下认证文件的读/写权限,所有这些都是相同的。
有人可以帮忙吗?
感谢。
答案 0 :(得分:5)
我遇到了同样的问题,这就是我解决它的方法。希望这对你也有帮助。
我们必须在应用程序池高级设置
中将加载用户配置文件设置为True您也可以在web.config中设置它。我相信。
答案 1 :(得分:0)
可能对你有用; 在本地尝试:
X509Certificate2 pc = new X509Certificate2(strFileName, strPassword);