首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用X509Certificate2获取PrivateKey会导致CryptographicException“指定的提供程序类型无效”

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

Stack Overflow用户
提问于 2015-09-07 11:52:27
回答 2查看 5.3K关注 0票数 6

所有人,

我正在开发一个web应用程序,它使用X509Certificate2从认证文件中获取私钥。代码片段如下所示:

代码语言:javascript
复制
    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网站上,它也工作得很好。

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

有人能帮上忙吗?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2016-11-11 00:48:02

我一直有同样的问题,这就是我为解决它所做的。希望这也能对你有所帮助。

我们必须在应用程序池高级设置中将Load User Profile设置为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/

票数 11
EN

Stack Overflow用户

发布于 2018-06-04 02:06:23

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

代码语言:javascript
复制
X509Certificate2 pc = new X509Certificate2(strFileName, strPassword);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32430835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档