1
將智能卡插入閱讀器時,證書將被讀入個人存儲,我的問題很簡單,那麼我如何解釋WCF應該在運行時使用特定(這些)證書?如何使用個人證書進行WCF通信?
我的WCF服務是自託管的,並通過TCP與客戶端進行通信。
我已經有一個使用證書的通信,但是這些證書在配置文件(一個用於服務,一個用於客戶端)中陳述。
現在我需要在通信之前在客戶端切換證書。
將智能卡插入閱讀器時,證書將被讀入個人存儲,我的問題很簡單,那麼我如何解釋WCF應該在運行時使用特定(這些)證書?如何使用個人證書進行WCF通信?
我的WCF服務是自託管的,並通過TCP與客戶端進行通信。
我已經有一個使用證書的通信,但是這些證書在配置文件(一個用於服務,一個用於客戶端)中陳述。
現在我需要在通信之前在客戶端切換證書。
您應該嘗試查找您想要使用的證書所特有的一組特定屬性。 例如,我們使用過濾是這樣的:你需要的證書
/// <summary>
/// Get the certificate we need for authentication
/// </summary>
/// <returns>the certificate</returns>
/// <exception cref="InvalidOperationException">when no certificate is available</exception>
public static X509Certificate2 GetCertificate()
{
// open private certificate store of the user
X509Store store = new X509Store(StoreName.My);
store.Open(OpenFlags.ReadOnly);
// get the collection of certificates which we need
X509Certificate2Collection certColl = store.Certificates
.Find(X509FindType.FindByExtension, new X509KeyUsageExtension().Oid.Value, false)
.Find(X509FindType.FindByKeyUsage, X509KeyUsageFlags.NonRepudiation, false);
store.Close();
// if more certificates match the criteria, let the user choose one
if (certColl.Count > 1)
{
certColl = X509Certificate2UI.SelectFromCollection(
certColl, "Choose certificate", "We were unable to find the correct certificate. Please choose one from the list.",
X509SelectionFlag.SingleSelection);
}
// if no certificate is available, fail
if (certColl.Count < 1)
{
throw new InvalidOperationException("No certificates selected");
}
else
{
return certColl[0];
}
}
檢查的屬性,並嘗試創建自己的查找標準。當然,在他的商店中可以使用符合條件的附加證書,這種情況下會彈出一個對話窗口並要求用戶親自做這件事。
當然,一旦用戶選擇正確的證書,您可以將證書的CN存儲在應用程序配置文件中,以便下次他不必再次執行這些步驟。
你解決了你的問題嗎?你能告訴我怎麼樣? – 2013-08-02 06:41:57