簡體   English   中英

使用X509Certificate2在https中進行客戶端證書認證

[英]client certificate authentication in https using X509Certificate2

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

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

我應該使用什么來創建映射? 證書指紋是不錯的候選人嗎? 確定客戶身份是否足夠?

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

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

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

困難的部分是分發證書,並使IIS向客戶端詢問證書,以便您的asp.net應用程序可以訪問其信息。 一旦有了所有請求,您的Request.ClientCertificate就會包含某些內容,其中包含證書的所有詳細信息,您需要對它們進行身份驗證。

我假設您正在使用.Net框架。 您可以嘗試使用HttpRequest.ClientCertificate屬性。 證書驗證已經通過ASP.NET完成,您只需要檢查IsValid屬性即可。 剩下的驗證工作是將證書映射到用戶。

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

如果需要調試,以后很難使用指紋。

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

1)我如何驗證客戶證書是由我簽發並信譽良好的?

非常籠統的答案是,您根據受信任的根證書驗證它的鏈。 例如,您可以在這里閱讀:

http://msdn.microsoft.com/zh-cn/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配置為根據受信任的證書請求和驗證客戶端證書。

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

如果您正在尋找完成操作的通用方法,則應在證書中使用“使用者備用名稱”屬性存儲主體名稱。 這是多個提供商使用的最常見的方法。

這是幾個與Windows相關的有趣鏈接:

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

http://technet.microsoft.com/zh-CN/library/cc736781(WS.10).aspx

但是,一般而言,您可以在證書中使用任何唯一的東西進行映射。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM