[英]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.