使用X509Certificate2获取PrivateKey会导致CryptographicException"指定的提供程序类型无效"

Ala*_*hao 4 cryptographicexception private-key

大家,

我正在开发一个使用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;
    }
Run Code Online (Sandbox Code Playgroud)

但是pc.Privatekey语句导致System.Security.Cryptography.CryptographicException"指定了无效的提供程序类型".我确定认证文件没有问题,它确实有一个私钥.并且属性pc.HasPrivateKey也返回true.

测试环境是VS2013,窗口7.

我也试过以下:

一个.我用iis express在VS2013中调试了它,出现了问题.

湾 我在另一台与我的环境相同的计算机上调试它,问题也出现了.

C.我将应用程序发布到运行在Windows Web Server 2008 R2上的iis的服务器上,它运行良好.

d.我向widows azure网站发布了该应用程序,它也运行良好.

因此,我猜代码片段没有问题.引发异常的关键原因是运行环境可能存在一些问题.我检查并比较了不同环境下认证文件的读/写权限,它们都是一样的.

有人可以帮忙吗?

谢谢.

Lee*_*one 5

我一直有同样的问题,这就是我解决它的方法.希望这对你也有帮助.

我们必须在应用程序池高级设置中将加载用户配置文件设置为True

您也可以在web.config中设置它.

https://blogs.msdn.microsoft.com/vijaysk/2009/03/08/iis-7-tip-3-you-can-now-load-the-user-profile-of-the-application-pool-身份/

在此输入图像描述