X509Certificate.CreateFromCertFile-指定的网络密码不正确我有一个.NET应用程序,我想将其用作客户端来调用SSLSOAPWeb服务。我已获得名为foo.pfx的有效客户端证书。证书本身有一个密码。我已将证书放在以下位置:C:certsfoo.pfx要调用Web服务,我需要附加客户端证书。这是代码:publicX509CertificateGetCertificateFromDisk(){try{stringcertPath=ConfigurationManager.AppSettings["MyCertPath"].ToString();//这计算为“c:\certs\foo.pfx”。到目前为止,一切都很好。X509CertificatemyCert=X509Certificate.CreateFromCertFile(certPath);//这里抛出异常!"指定的网络密码不正确"returncert;}catch(Exceptionex){抛出;}}听起来像.NET试图读取磁盘应用程序异常。CreateFromCertFile方法是一个静态方法,应该创建X509Certificate的新实例。此方法未被覆盖,并且只有一个参数:路径。检查异常时发现:_COMPlusExceptionCode=-532459699Source=mscorlib问:有谁知道异常“指定的网络密码不正确”的原因?事实证明,我试图从.pfx而不是.cer文件创建证书。经验教训...您可能需要使用带有参数X509KeyStorageFlags.MachineKeySet的X509Certificate2()。这解决了我们遇到的类似问题。感谢原始站点的建议:http://vdachev.net/2012/03/07/c-sharp-error-creating-x509certificate2-from-a-pfx-or-p12-file-in-production/引用:问题原因原因好像和报错信息关系不大。由于某种原因,即使私钥存储在正在打开的文件中,构造函数仍试图访问私钥存储。默认情况下使用用户密钥库,但不允许ASP.NET(以及一般的非交互式Windows服务)打开它。所选帐户的用户密钥库可能根本不存在。解决方案您可以尝试的一件事是通过登录帐户并将证书导入其个人存储(然后再次删除)来创建用户密钥库。另一种解决方案是将另一个参数传递给构造函数——一个指示私钥(应该)存储在本地机器中的标志——X509KeyStorageFlags.MachineKeySet,如下所示:varcertificate=newX509Certificate2(fileName,password,X509KeyStorageFlags.MachineKeySet);对于没有密码的PFX,密码可以指定为string.Empty。另请参阅https://stackoverflow.com/a/8291956/130352根据您的情况,您可能需要先在服务器上安装证书以在导出.cer文件之前获得信任级别。我必须为一个类似的项目这样做,这里是关于如何完成的注释。将Foo.cer替换为服务器上安装的证书的导出。(从pfx文件安装证书,然后将其导出到cer文件。)下载WinHttpCertCfg.msi以安装exe。有关如何使用证书配置的更多信息,请访问此处。然后回到如何进行证书推送。//证书挑战URLUrirequestURI=newUri("https://someurl");//创建请求对象HttpWebRequestpageRequest=(HttpWebRequest)WebRequest.Create(requestURI);//在服务器上安装证书后,将客户端证书作为Foo.cer导出到工作目录stringcertFile=MapPath("Foo.cer");X509Certificatecert=X509Certificate.CreateFromCertFile(certFile);//设置请求对象参数pageRequest.ContentType="application/x-www-form-urlencoded";pageRequest.Method="POST";pageRequest.AllowWriteStreamBuffering=false;pageRequest.AllowAutoRedirect=false;pageRequest.ClientCertificates.Add(cert);这是我通过证书的方式,不确定你需要为你的做什么,所以这对你来说可能不一样。当您尝试在其中一个已存在的操作系统商店中导入证书时,也会返回“指定的网络密码不正确”错误消息。在我的例子中,我试图在私有应用程序模式下运行,但我遇到了同样的错误。指定的网络密码不正确PrivateAuthenticator构造函数(在Xero.Api.Example.Applications.Private中)尝试导入证书,假设在证书创建期间未定义密码。_certificate=newX509Certificate2();_certificate.Import(certificatePath);然后我将导入更改为使用使用密码的重载方法_certificate.Import(certificatePath,"mypasswordusedtocreatethecertificate",X509KeyStorageFlags.MachineKeySet);您可能需要X509KeyStorageKeyFlags.MachineKeySet我正在使用来自网络作业的证书。在我的例子中,在应用程序池中将Identity更改为NetworkService解决了这个问题。以上是C#学习教程:X509Certificate.CreateFromCertFile–指定的网络密码不正确,内容全部共享。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
