C# 加密异常未处理:系统找不到指定的文件

C# 加密异常未处理:系统找不到指定的文件,c#,.net,x509certificate,cryptographicexception,C#,.net,X509certificate,Cryptographicexception,我试图拥抱SSL通信的奥秘,并找到了一个关于SSL通信的优秀教程。我试着测试我自己的证书。使用Visual Studio 2012,我只需添加一个现有文件(我的证书为.pfx格式),然后更改app.config中的“证书”和“密码”设置。但是,在尝试运行它时,我遇到了一个错误: 加密异常未处理:系统找不到指定的文件 然后,我在我的Web服务中尝试了同样的方法。在这里,我获得了有关错误的更多详细信息: System.Security.Cryptography.CryptographicExcept

我试图拥抱SSL通信的奥秘,并找到了一个关于SSL通信的优秀教程。我试着测试我自己的证书。使用Visual Studio 2012,我只需添加一个现有文件(我的证书为.pfx格式),然后更改app.config中的“证书”和“密码”设置。但是,在尝试运行它时,我遇到了一个错误:

加密异常未处理:系统找不到指定的文件

然后,我在我的Web服务中尝试了同样的方法。在这里,我获得了有关错误的更多详细信息:

System.Security.Cryptography.CryptographicException: System cannot find specified file.

   at System.Security.Cryptography.CryptographicException.ThrowCryptogaphicException(Int32 hr)
   at System.Security.Cryptography.X509Certificates.X509Utils._QueryCertFileType(String fileName)
   at System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromFile(String fileName, Object password, X509KeyStorageFlags keyStorageFlags)
   v System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(String fileName, String password)
   v TestServer.DataService.LoadSoap() v c:\Users\Administrator\Documents\Visual Studio 2012\Projects\TestServer\TestServer\DataService.asmx.cs:line 48
我已经把这个问题写给了文章的作者,但由于他的最后一次回复是在2012年3月,我不确定他是否会回复。如果有人能帮我解决这个问题,我将非常感激


注意:将证书从.cer导出到.pfx时,我已更改了导出文件的标题。虽然我怀疑它对这个问题的影响,但我还是想提一下。

您是否在IIS中的应用程序池上设置了以下内容

  • 转到IIS管理器
  • 转到应用程序池实例
  • 单击高级设置
  • 在“流程模型”下,将“加载用户配置文件”设置为true

  • 请参阅此堆栈问题以进一步阅读:

    因为此问题具有较高的搜索排名,所以我想介绍一种方法,以向ASP.net应用程序中相对位置的pxf密钥文件提供X509Certificate2的绝对路径(它只接受该路径)

        string path = HttpContext.Current.Server.MapPath("~") + "..\keys\relative_key.pfx";
    
        X509Certificate2 cert = new X509Certificate2(path, "", X509KeyStorageFlags.DefaultKeySet);
    

    通过传递带有标志CSDMachineKeyStore的CSPSParameters,IIS可以绕过引发异常的限制

    CspParameters cspParams = new CspParameters();
    cspParams.KeyContainerName = Guid.NewGuid().ToString().ToUpperInvariant();
    cspParams.Flags = CspProviderFlags.UseMachineKeyStore;
    RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(cspParams);
    
    我在这里创建了解决方案:


    对于那些在尝试使用导入方法导入X509Certificate2时收到加密异常的人,我发现使用MachineKeySet的Enum选项绕过了在IIS中创建userContext的需要,因此更容易实现

    X509Certificate2 cert = new X509Certificate2();
    cert.Import(certificateFilePath, certPasshrase, 
    X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);
    

    您需要指定绝对路径而不是相对路径

    AppDomain.CurrentDomain.BaseDirectory +"/Certificate/cer.PFX"
    

    您正在指定文件的完整路径名吗?哇。。。现在我觉得自己像个十足的白痴。指定完整路径后,它将工作。。。客户说,证书无效,但这可能是因为它是为我的旧电脑颁发的。所以,谢谢你。。。我认为,这个话题可以被认为是非建设性的。谢谢你,先生!几个月来我一直在与这个错误作斗争。在错误再次出现之前,必须重新启动服务器或重新启动IIS才能“有时间”。哦,天哪。多么荒谬的错误!!我试着检查了又检查,没有发现文件名有任何问题***t密码异常告诉您错误的文件路径,但事实上并非如此。如果这对您不起作用,只需在正确的应用程序池上再次检查您是否将其设置为true。(首先检查哪个应用程序池分配给您的应用程序)在Azure中:使用应用程序设置->添加值为“1”的“网站加载用户配置文件”。Epic catch。事实证明,我犯这个错误的全部原因是因为我的证书路径有点偏离。我没有足够的语言来表达我对你的感激之情,因为这个简单的修复!非常感谢。在我的例子中,本地的一切都很好,但是在azure上我收到了“.找不到指定的文件”错误。这是固定的,只要这样做,快乐。在windows 10 2004中,使用IIS对我不起作用。我尝试了所有可能的组合。这很有魅力