簡體   English   中英

在IIS 6上使用ASP.NET MVC站點的客戶端證書

[英]Working with client certificates for an ASP.NET MVC site on IIS 6

想要通過客戶端證書實現身份驗證我遇到了一些問題。

首先是一些事實

整個網站都在使用SSL。 我正在使用IIS 6(在Windows Server 2003上),並已將站點配置為接受客戶端證書,而不是它們。 然而,大多數瀏覽器以某種方式實現,以便它們僅在嚴格要求時才詢問用戶證書。 因此,身份驗證模型並不真正有用。

我自己的建議

我的第一個想法是設置HttpResponse.Status屬性,但它要求第一個空格之前的字符是一個整數。 獲取瀏覽器發送客戶端證書的有用狀態是403.7 Client certificate required因此這將不起作用(除非您可以覆蓋它)。

我還認為我只是將IIS配置為需要特定路徑的客戶端證書,但這個 - 源代碼 - 僅適用於物理文件而不適用於路由。

一個可能的解決方案是創建一個特定的文件夾,並要求它的客戶端證書,這是一個黑客而不是解決方案。 如果有人有更好的建議,我想避免這種情況。

澄清

我測試了Internet Explorer,Firefox和Chrome的瀏覽器響應(我使用Chrome作為主瀏覽器,Firefox作為輔助瀏覽器)。 除非我 - 在IIS中 - 根據需要配置它,否則所有瀏覽器都不會要求提供客戶端證書。

HTTP狀態代碼403.7是由於我的理解允許,因為RFC 2616僅將狀態代碼定義為前三位數。 當IIS 6在需要客戶端證書時返回403.7,我認為發送它會強制IIS進入觸發需求的特殊模式。

我想現在的問題是如何配置IIS以獲得給定虛擬路徑而不是物理路徑的證書。

僅在請求證書時,服務器發送的CertificateRequest消息沒有區別,而不是必需的。 服務器在兩種情況下都發出相同的請求,並在客戶端無法提供所需證書時簡單地終止握手。 因此,如果您的瀏覽器似乎忽略了“請求”,它似乎也會忽略“要求”。

檢查以下內容:

  • 您的瀏覽器是否配置為忽略所有證書請求,從不發送一個?
  • 您的瀏覽器是否配置為使用給定的證書而不提示用戶? (換句話說,你怎么知道瀏覽器沒有發送證書?)
  • 您的服務器實際上是在申請證書嗎?

我測試最后一種情況的方法是使用OpenSSL (也可以在Cygwin中使用 )工具:

openssl s_client -connect server.y.com:443 -msg

服務器發送其證書消息后,它將插入一個CertificateRequest方法,如果它沒有請求客戶端身份驗證,則該方法不存在。 s_client輸出如下所示:

<<< TLS 1.0 Handshake [length 0008], CertificateRequest
    0d 00 00 04 01 01 00 00

如果服務器僅在特定路徑上使用客戶端身份驗證,我不確定它是如何工作的,因為在客戶端傳輸HTTP請求之前,初始SSL握手已完成。 此時服務器請求新的握手是合理的,但我從未測試過要查看哪些服務器支持此操作。

您可以通過s_client手動偽造HTTP請求,輸入:

GET /your/path/here HTTP/1.1[Enter]
Host: server.y.com:443[Enter]
[Enter]

如果您根本看不到CertificateRequest消息,則說明您的服務器設置不正確。

根據目錄結構指定安全性約束是很常見的,實際上可以很好地簡化安全性管理。 如果能為您提供解決方案,請不要為此感到難過。

403.7不是HTTP狀態代碼。 這是微軟“擁抱,延伸和消滅”一些詭計嗎? 在任何情況下,它聽起來都不是正確的方向,因為這是傳輸層問題,而不是應用層問題。

暫無
暫無

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

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