2012-10-23 177 views
1

我想了解客戶端身份驗證如何在https場景中工作,以及如何使用它來提供基本的身份驗證/授權功能。HTTPS客戶端證書身份驗證使用X509Certificate2

假設我想要在證書和用戶之間建立映射(例如IPrincipal)。我的服務器頒發證書並將它們分發給客戶端。當客戶端連接時,我要求提供證書,如果提供了有效的證書,則根據前面定義的映射對用戶進行身份驗證。

我應該使用什麼來創建映射? cert thumbprint是不錯的人選?足以確定客戶身份嗎?

或者我可能根本不需要映射,只需接受我的服務器發佈的所有證書?

編輯:讓我重新修改它 - 假設我可以頒發客戶端證書,在https會話期間如何驗證客戶端身份?

回答

1

很多你的要求很大程度上取決於你現有的證書基礎設施的外觀。 出於安全原因,我會強烈建議通過映射來識別特定用戶。如果您已經盡力爲用戶身份驗證分發證書,那麼可能值得保證。您需要的任何授權或審計應該是每個用戶。 最好的方法是使用cert CN(通用名稱)。拇指指紋將被識別爲特定的證書,但是當證書到期時會發生什麼? 這當然意味着當您頒發證書時CN受到控制,並且將與特定人員相關。我發現使用電子郵件地址非常可靠,因爲您可以通過發送確認電子郵件來創建驗證例程。您還可以通過電子郵件地址強制執行一些唯一性。

最難的部分是分發證書並讓IIS向客戶端請求證書,以便您的asp.net應用程序可以訪問其信息。一旦你有所有的請求將在Request.ClientCertificate有什麼東西,其中有他們的證書的所有細節,你需要認證他們。

0

我假設你使用.Net框架。您可以嘗試使用HttpRequest.ClientCertificate屬性。證書驗證已經用ASP.NET完成,您只需檢查IsValid屬性即可。其餘的驗證是地圖證書給用戶。

如果所有證書都由相同的CA頒發,則可以使用證書序列號。如果不包含具有序列號的HttpClientCertificate.Issuer屬性。

如果您需要一些調試,指紋很難再使用。

0

您的問題包含兩個不同的部分:

1)我如何驗證客戶端證書是由我和良好的信譽發行的?

非常普遍的答案是,您可以根據受信任的根證書驗證它的鏈。 作爲例子,你可以在這裏閱讀:

http://msdn.microsoft.com/en-us/library/windows/desktop/dd407310(v=vs.85).aspx http://www.openssl.org/docs/apps/verify.html http://www.cryptosys.net/pki/x509_validatechain.html

在大多數情況下,你沒有寫任何代碼去做這個。您只需要在Web服務器之前安裝Apache(例如)Apache。 Apache可以配置爲根據可信證書申請和驗證客戶端證書。

2)如何將證書映射到用戶?

如果您正在尋找一種通用的方式,那麼您應該使用證書中的主題備用名稱屬性來存儲主體名稱。這是多個提供商使用的最常見的方式。

這裏有幾個相關的Windows相關鏈接:

http://technet.microsoft.com/en-us/library/cc736706(v=ws.10).aspx

http://technet.microsoft.com/en-us/library/cc736781(WS.10).aspx

然而,一般來說,你可以使用任何獨特的東西在證書映射。

相關問題