【问题标题】:Using X509Certificate2 to get PrivateKey causes CryptographicException "Invalid provider type specified"使用 X509Certificate2 获取 PrivateKey 导致 CryptographicException “指定的提供程序类型无效”
【发布时间】:2015-09-07 03:52:26
【问题描述】:

大家,

我正在开发一个使用 X509Certificate2 从认证文件中获取私钥的 Web 应用程序。代码 sn-p 如下所示:

    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 "Invalid provider type specified" 。我确定认证文件没有问题,它确实有一个私钥。并且属性 pc.HasPrivateKey 也返回 true。

测试环境为VS2013,window 7。

我也尝试了以下方法:

一个。我用iis express在VS2013中调试过,出现问题。

b.我在另一台和我环境一样的电脑上调试,也出现了问题。

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

d。我将应用程序发布到 widows azure 网站,它也运行良好。

所以,我猜sn-p这个代码是没有问题的。引发异常的关键原因是运行环境可能存在问题。我检查并比较了不同环境下认证文件的读写权限,都是一样的。

有人可以帮忙吗?

谢谢。

【问题讨论】:

    标签: private-key cryptographicexception


    【解决方案1】:

    我遇到了同样的问题,这就是我为解决它所做的。希望这对您也有帮助。

    我们必须在应用程序池高级设置中将加载用户配置文件设置为 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-identity/

    【讨论】:

    【解决方案2】:

    可能对你有用; 在本地尝试:

    X509Certificate2 pc = new X509Certificate2(strFileName, strPassword);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-27
      • 2014-04-30
      • 2019-02-03
      • 2018-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多