所有人,
我正在开发一个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,window 7。
我还尝试了以下内容:
a.我用iis express在VS2013中调试过,出现了问题。
b.我在另一台和我的环境相同的计算机上调试过,也出现了问题。
c.我将应用程序发布到运行在Windows Web Server2008 R2上的iis服务器上,它工作得很好。
d.我将应用程序发布到了widows azure网站上,它也工作得很好。
因此,我猜代码片段没有问题。引发异常的关键原因是运行环境可能存在一些问题。我检查并比较了不同环境下对认证文件的读写权限,它们都是相同的。
有人能帮上忙吗?
谢谢。
发布于 2016-11-11 00:48:02
我一直有同样的问题,这就是我为解决它所做的。希望这也能对你有所帮助。
我们必须在应用程序池高级设置中将Load User Profile设置为True
我相信你也可以在web.config中设置它。
发布于 2018-06-04 02:06:23
它可能对您有用;在本地尝试:
X509Certificate2 pc = new X509Certificate2(strFileName, strPassword);
https://stackoverflow.com/questions/32430835
复制相似问题