用戶端數位憑證與基本驗證(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 類,因而在程式中處理也更為方便一些。