客戶端數字證書與基本身份驗證(Basic)、域服務器的摘要式身份驗證、集成 Windows 身份認證或自定義的 Form 認證等方式相比,雖然部署和管理方面稍微復雜一些,但安全性也更好一些,應用上也較為靈活。
在 ASP 和 ASP.Net 中處理和識別客戶端數字證書是非常容易的,代碼如下:
ASP (VBScript)語法:
Dim subject
subject=Request.ServerVariables("CERT_SUBJECT")
或
subject=Request.ClIEntCertifate("Subject") '--適用於 Subject 沒有中文的證書
ASP.Net(C#) 語法:
string subject ;
HttpClientCertificate hcc = Request.ClIEntCertificate;
if(hcc.IsValid) = hcc.Subject;
得到的 subject 字符串是以逗號分隔的子字段列表。例如,C=CN,O=BOC,CN=moslem ,然後將字符串分隔處理,取最後的 CN 值(可能不止一個 CN),這個值是用戶的 Common Name ,即“常規名稱”,一般就是用戶的姓名或 ID。
拿到數字證書中的 CN 後,就可以做進一步的處理了,如對用戶進行授權等。我認為比較有效的一種做法是在客戶端同時啟用數字證書和 Form 認證,可以通過比較 CN 和 Form 中輸入的用戶名的值是否匹配來做到多因子身份認證。
相對來說,ASP.Net 中提供了專門的處理客戶端數字證書的 HttpClIEntCertificate 類,因而在程序中處理也更為方便一些。