我必須做一個概念證明,到目前爲止,我主要是找到引用IIS6的舊文章,這並沒有幫助。IIS 7.5和客戶端身份驗證
總之我有以下要求。
我需要使用客戶端證書來保護一個文件/頁面和這一個文件/頁面。網站的其他部分需要繼續在SSL下運行,但不需要客戶端證書,只需要這一個文件即可。用戶映射是被禁止的,因爲映射將通過C#/ VB.NET以編程方式完成。
現在我知道這應該不難。我的意思是我應該可以訪問Request.ClientCertificate屬性,但是我的問題是,在我的測試中,我無法獲得客戶端證書來沿着線路傳輸。
我設置IIS上的一個文件夾(只是爲了讓我的生活簡單)要求SSL並接受客戶端證書,以及需要客戶端證書但我從IIS得到一次訪問該頁面時 HTTP/1.1 403 Forbidden
。我從來沒有被要求選擇一個客戶端證書發送到服務器,它只是將我的請求全部發送並丟棄它。
當我使用一些代碼來測試它時,它會變得更加怪異。在此客戶端代碼中,CertPolicy類只是從方法返回true以忽略證書錯誤,而test.cer是使用MakeCert製作的自簽名證書。只是要說清楚,只有客戶證書如果自簽名,主要證書是正確簽署的,但我與小提琴手很多玩,我沒有信任該證書,所以這就是爲什麼我有hacky回調。
Dim Cert As X509Certificate = X509Certificate.CreateFromCertFile("Cert\test.cer")
' Handle any certificate errors on the certificate from the server.
ServicePointManager.CertificatePolicy = New CertPolicy()
' You must change the URL to point to your Web server.
Dim Request As HttpWebRequest = DirectCast(WebRequest.Create("https://local.domain.com/Cert/Server/"), HttpWebRequest)
Request.ClientCertificates.Add(Cert)
Request.UserAgent = "Client Cert Sample"
Request.Method = "GET"
Dim sr As StreamReader
Using Response As HttpWebResponse = DirectCast(Request.GetResponse, HttpWebResponse)
' Print the repsonse headers.
output.AppendFormat("{0}\r\n", Response.Headers)
output.AppendLine()
' Get the certificate data.
sr = New StreamReader(Response.GetResponseStream, Encoding.Default)
Dim count As Integer
Dim ReadBuf() As Char = New Char((1024) - 1) {}
Do
count = sr.Read(ReadBuf, 0, 1024)
If Not 0 = count Then
output.AppendLine(New String(ReadBuf))
End If
Loop While (count > 0)
End Using
目標頁面剛剛返回附屬證書的數量,如果我設置IIS接受或忽略客戶端證書,但不要求它總是返回。
Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
MyBase.OnLoad(e)
Dim cs As HttpClientCertificate = Request.ClientCertificate
Response.Write(cs.Count)
Response.End()
End Sub
如果有人可以幫助我瞭解如何IIS7.5配置爲允許客戶端證書附加到一個請求,只是通過傳遞將是巨大的。
我發現如果你指定'SslRequireCert',你必須*也*指定'SslNegotiateCert'。 – AakashM 2012-11-07 08:58:42
看起來像你正在做的事情。你可以檢查http://stackoverflow.com/questions/14407666/how-do-i-implement-client-certificate-authentication-the-right-way,也許提供我正在尋找的必要信息?對於我來說,與這個答案相關的重要性在於此配置的serverpart的web.config中此ClientCertificateMappingAuthentication節點的重要性。 – 2013-01-18 22:26:12