2011-02-14 135 views
3

我在寫一個WCF服務,我需要訪問用於連接到服務的客戶端證書的哈希碼。從WCF服務訪問客戶端證書屬性

我正在尋找類似於ASP.NET 2.0 2.0版Request.ClientCertificate的屬性或方法,但無法找到允許輕鬆訪問客戶端證書的任何內容。

我們的服務設置爲使用basicHttpBinding和「Transport」安全模式使用SSL運行。

IIS已設置爲要求SSL和接受證書。

需要注意的一件事是我們用於保護端點的服務器證書來自與客戶端證書不同的CA--客戶端證書旨在僅通過自定義代碼進行驗證(因此需要獲取散列連接證書的代碼)。

我已經創建了IDispatchMessageInspector的自定義實現,以查看是否有任何對客戶端證書的訪問,但無濟於事。

有沒有人嘗試過這個,並取得了成功?

回答

4

看起來像你最好的選擇是爲你的服務實現一個自定義的證書驗證器。這基本上是從X509CertificateValidator派生的類,然後是registered通過配置文件。

關於如何在this article上執行此操作的更完整的信息。

+3

謝謝,這個解決方案完美:) 我們確實採取了這種方法,然後也發現WCF正在填充我們需要的信息ServiceSecurityContext而無需使用自定義證書驗證程序,只需在我們的服務實現中使用以下代碼: ((X509CertificateClaimSet)ServiceSecurityContext.Current.A uthorizationContext.ClaimSets [0])。X509Certificate – lowds 2011-02-16 08:36:59

2

僅供參考,如果其他人嘗試應用都需要執行以下步驟才能正常工作,客戶端證書身份驗證(我們中WCF使用basicHttpBinding的這個實例,並在IIS的本地實例上運行):

  1. 設置IIS以對站點使用HTTPS綁定並使用服務器證書在IIS中對其進行保護
  2. 在IIS內將您的站點的SSL設置更改爲需要SSL和要求客戶端證書(它必須是要求 - 接受不起作用)
  3. 在WCF配置中,修改basicHttpBinding d組的安全模式爲「運輸」和運輸clientCredentialType到「證書」

確保根證書(一種用於創建任何客戶端證書)是「受信任的根Cerrtification機構」中爲本地計算機在哪個IIS上運行。

注意如果您在開發環境中,您可能需要生成自己的根證書,makecert命令行應用程序對此非常有用;只需運行以下命令: makecert -n「CN = My Test Auth」-r -cy authority -a sha1 -sv「My Private Key.pvk」TestAuth.cer

這會創建一個名爲TestAuth.cer的證書需要將其添加到計算機的「受信任的根證書頒發機構」)和一個名爲「My Private Key.pvk」的私鑰文件。

現在要生成客戶端證書,您可以運行以下命令: makecert -a sha1 -n「CN = myConnectionCert」-ic「TestAuth.cer」-iv「My Private Key。pvk「-ss我的

這創建了一個帶有myConnectionCert主題的證書並將其添加到您的個人證書存儲區 - 當您現在訪問該網站時(例如查看服務頁面),IE應提示您選擇證書 - 選擇你剛創建的那個,你應該看到服務頁面正常。