[英]How to load another's certificate to my local certificate store?
我有另一个服务提供商分发的证书(.pem文件)。 我从供应商处下载了证书,并将其保存到本地驱动器中。 在我的WCF客户端中,我试图从本地驱动器加载此证书,并且在与服务通信时出现错误“ X.509证书中不存在私钥”。 有人告诉我需要将此证书加载到本地证书存储中以解决此错误。 谁能提供一些指示? 谢谢!
我具有以下功能,可从file参数中指定的路径加载证书。
public static X509Certificate LoadCertificate(string file)
{
try
{
return X509Certificate.CreateFromCertFile(file);
}
catch (System.Security.Cryptography.CryptographicException)
{
string filestr = File.ReadAllText(file);
StringBuilder sb = new StringBuilder(filestr.Remove(0, filestr.IndexOf("-----BEGIN CERTIFICATE-----")));
sb.Replace("-----BEGIN CERTIFICATE-----", "");
sb.Replace("-----END CERTIFICATE-----", "");
//Decode
try
{ //see if the file is a valid Base64 encoded cert
byte[] certBytes = Convert.FromBase64String(sb.ToString());
return new X509Certificate(certBytes);
}
catch (System.FormatException)
{
throw;
}
}
}
在我的WCF客户端中,它正在加载从LoadCertificate()函数创建的证书。
public X509Certificate Certificate { get; set; }
ClientCredentials loginCredentials = new ClientCredentials();
loginCredentials.UserName.UserName = this.UserId;
loginCredentials.UserName.Password = this.Password;
loginCredentials.ClientCertificate.Certificate = new X509Certificate2(this.Certificate);
您的代码表明,除了提供用户名和密码之外,您还尝试使用证书对服务器进行客户端身份验证 。 这很奇怪,但我想可能。 为此,您将需要与该证书关联的私钥,因为客户端将需要它们来加密通信,以便服务器可以使用证书来解密并验证客户端是否合法。 .pem文件可以包含公钥和私钥,但是发送给您的文件可能不包含吗?
我的猜测是,实际上您只希望客户端连接到使用此证书来标识自己并加密通信的服务器。 如果是这样,客户端所需要做的就是在本地导入证书,以便在客户端首次连接到服务器时,当服务器发送该证书时,它可以与此本地版本进行比较。
为此,Microsoft在文件浏览器中双击.pem文件以启动证书导入向导。 但是,如果这对您不起作用,这是困难的方法:
单击确定关闭管理单元窗口
现在浏览到证书(本地计算机)-个人-证书
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.