当前位置:  开发笔记 > 编程语言 > 正文

X509Certificate.CreateFromCertFile - 指定的网络密码不正确

如何解决《X509Certificate.CreateFromCertFile-指定的网络密码不正确》经验,为你挑选了4个好方法。

我有一个.NET应用程序,我想用它作为客户端来调用SSL SOAP Web服务.我已经获得了一个有效的客户证书foo.pfx.证书本身有密码.

我在以下位置找到了证书: C:\certs\foo.pfx

要调用Web服务,我需要附加客户端证书.这是代码:

public X509Certificate GetCertificateFromDisk(){
    try{             

       string certPath = ConfigurationManager.AppSettings["MyCertPath"].ToString(); 
       //this evaluates to "c:\\certs\\foo.pfx". So far so good.

       X509Certificate myCert = X509Certificate.CreateFromCertFile(certPath);
       // exception is raised here! "The specified network password is not correct" 

       return cert;

     }
    catch (Exception ex){    
        throw;
     }
}

听起来像尝试读取磁盘的.NET应用程序是个例外.该方法CreateFromCertFile是一个静态方法,应该创建X509Certificate的新实例.该方法未被重写,并且只有一个参数:路径.

当我检查异常时,我发现:

_COMPlusExceptionCode = -532459699
Source=mscorlib

问题:有没有人知道异常的原因"指定的网络密码不正确"?



1> p.campbell..:

事实证明我试图从.pfx而不是.cer文件创建证书.

学过的知识...

.cer文件是二进制形式的X.509证书.它们是DER编码的.

.pfx文件是容器文件.DER编码.它们不仅包含证书,还包含加密形式的私钥.



2> Chris J..:

您可能需要X509Certificate2()使用参数来X509KeyStorageFlags.MachineKeySet代替.这解决了我们遇到的类似问题.感谢建议的原始网站:http://vdachev.net/2012/03/07/c-sharp-error-creating-x509certificate2-from-a-pfx-or-p12-file-in-production/

引用:

原因

问题的原因似乎与错误消息没有多大关系.由于某种原因,构造函数试图访问私钥存储,尽管私钥存储在正在打开的文件中.默认情况下,使用用户密钥库,但不允许ASP.NET(通常可能是非交互式Windows服务)打开它.有可能是所选帐户的用户密钥库甚至不存在.

您可以尝试的一件事是通过登录帐户并在其个人存储中导入证书(然后再次将其删除)来创建用户密钥库.

另一个解决方案是将另一个参数传递给构造函数 - 一个标志,指示私钥(应该是)存储在本地计算机中 - X509KeyStorageFlags.MachineKeySet,如下所示: var certificate = new X509Certificate2(fileName, password, X509KeyStorageFlags.MachineKeySet);

对于没有密码的PFX,可以将密码指定为string.Empty.

另请参见/sf/ask/17360801/



3> benjamin..:

根据您的具体情况,您可能需要首先在服务器上安装证书,以便在导出.cer文件之前获得信任级别.

我必须为一个类似的项目做这个,这里是关于它是如何完成的笔记.

替换为Foo.cer导出服务器上安装的证书.(从pfx文件安装证书,然后将其导出到cer文件.)

IIS6的命令允许IIS_WPG组访问cert密钥.需要安装winhttpcertcfg(您可以按照以下链接获取自己的副本).

C:\ Program Files\Windows资源工具包\工具> winhttpcertcfg -i(pfx文件的路径,例如.e:\ Certs\Foo.pfx)-c LOCAL_MACHINE\My -a IIS_WPG -p(pfx文件的密码)

吐出关键信息并授予特权

授予帐户私钥访问权限:

(SERVERNAME)\IIS_WPG

WinHttpCertCfg.msi 在这里下载安装exe.

有关如何使用cert配置的更多信息,请访问此处.

然后它回到你如何进行证书推送.

//Cert Challenge URL 
Uri requestURI = new Uri("https://someurl");

//Create the Request Object
HttpWebRequest pageRequest = (HttpWebRequest)WebRequest.Create(requestURI);

//After installing the cert on the server export a client cert to the working directory as Foo.cer
string certFile = MapPath("Foo.cer");
X509Certificate cert = X509Certificate.CreateFromCertFile(certFile);


//Set the Request Object parameters
pageRequest.ContentType = "application/x-www-form-urlencoded";
pageRequest.Method = "POST";
pageRequest.AllowWriteStreamBuffering = false;
pageRequest.AllowAutoRedirect = false;
pageRequest.ClientCertificates.Add(cert);

这是我如何通过证书但不确定您需要对您的证书做什么,所以这可能与您不一样.



4> 小智..:

当您尝试在其中一个OS存储中导入的证书已存在于该存储中时,也会返回"指定的网络密码不正确"错误消息.

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有