本節使用Transport安全模式來做Certificate驗證,因為TransportCredentialOnly模式不支援證書。
Certificate驗證需要用戶端或者服務端提供證書,進而進行身份驗證。首先我們在vs2010的指令行使用如圖11-42所示的指令建立兩個證書,分别用于服務端和用戶端。
<a href="http://images.cnblogs.com/cnblogs_com/xuanhun/201107/201107021153432888.gif"></a>
圖11-42 建立證書
證書建立完成之後,我們在MMC控制台添加證書管理單元,然後将兩個證書轉移到受信任存儲區,如圖11-43。
<a href="http://images.cnblogs.com/cnblogs_com/xuanhun/201107/201107021153475792.gif"></a>
圖11-43 将證書轉移到受信任存儲區
<b>說明</b>:
圖11-43所示的過程我們也完全可以在指令行把證書直接生成到指定的區域,這裡主要的目的是告訴大家如何統一的管理證書。
因為傳輸安全模式下使用的是SSL連結,當然這需要我們在IIS配置站點的https綁定。
我們重新建立一個和站點同名的證書--wcfservicewebsite.com,然後将其導出到本地。打開IIS,首先切換到IIS7.5的伺服器管理,單擊“伺服器證書”,為伺服器添加證書。然後回到服務站點管理視圖,編輯站點綁定,選擇添加的證書。回到站點管理視圖,點選“SSL設定”,勾選“要求SLL”,如圖11-44。
<a href="http://images.cnblogs.com/cnblogs_com/xuanhun/201107/201107021153499404.gif"></a>
圖11-44 配置站點要求SSL
此時通路站點會報告證書無效,因為是本地生成的證書沒有經過驗證的頒發機構,如圖11-45所示。
<a href="http://images.cnblogs.com/cnblogs_com/xuanhun/201107/201107021153513190.gif"></a>
圖11-45 通路https連結證書錯誤
此時我們可以單擊IE上的紅叉,根據提示來将此證書安裝到受信任的頒發機構中,如圖11-46和圖11-47。
<a href="http://images.cnblogs.com/cnblogs_com/xuanhun/201107/201107021153564242.jpg"></a>
圖11-46 選擇安裝證書
<a href="http://images.cnblogs.com/cnblogs_com/xuanhun/201107/20110702115359984.jpg"></a>
圖11-47 将證書安裝到受信任的根證書頒發機構
再次重新整理站點,我們看到是通過驗證的鎖頭标志,如圖11-48。
<a href="http://images.cnblogs.com/cnblogs_com/xuanhun/201107/201107021154027693.gif"></a>
圖11-48 證書通過驗證
首先我們看看不設定用戶端憑據情況下Transport模式下的通信是什麼樣的,修改服務端配置為代碼清單11-100所示的内容。
代碼清單11-100 不設定用戶端憑據
用戶端根據服務端做相應的調整,之後設定可以通過https擷取中繼資料,配置如代碼清單11-101
用戶端相應的将endpoint的address修改為:
運作測試站點,結果如圖11-49。
<a href="http://images.cnblogs.com/cnblogs_com/xuanhun/201107/201107021154051121.gif"></a>
圖11-49 Transport模式無憑據測試結果
從圖11-49的結果結合服務端代碼,我們可以知道目前采用的是匿名通路。那麼傳輸層是不是保證了傳輸安全呢?我們Fiddler的捕獲結果,如代碼清單11-102。
代碼清單11-102 Transport模式下捕獲的資料
代碼清單11-102的内容是用戶端發送的請求内容,Fiddler顯示的并不是原始資料,但是足以證明資料在傳輸層面得到了保護,被加密傳輸,可以設定Fiddler對SSL進行解密,解密後的請求資料如代碼清單11-103所示。
代碼清單11-103 實際的請求資訊
現在我們來配置服務端和用戶端證書,分别使用上面生成的兩個證書。接下來我們配置服務端證書,如代碼清單11-104。
代碼清單11-104 配置服務端證書
<a href="http://images.cnblogs.com/cnblogs_com/xuanhun/201107/20110702115411287.gif"></a>
圖11-50 找不到證書錯誤
我在Window7上做測試偶爾會出現這樣的錯誤,有可能是證書存儲區的緩存機制造成的,不過将證書存儲在LocalMachine上,可以迅速找到。這可能和IIS托管有關,筆者對此沒有深入研究,如果您遇到同樣的問題可以嘗試将證書放在LocalMachine存儲區上。
更新測試站點的配置,更新後客戶的相關配置如代碼清單11-105所示。
代碼清單11-105 用戶端證書配置
啟動測試站點,得到了如圖11-51的錯誤。
<a href="http://images.cnblogs.com/cnblogs_com/xuanhun/201107/201107021154124355.gif"></a>
圖11-51 SSL配置不一緻錯誤
出現圖11-51的錯誤的原因在于服務本身要求用戶端必須傳遞證書,而IIS的SSL設定沒有對客戶證書設定成必須。按圖11-52修改就可以了。
<a href="http://images.cnblogs.com/cnblogs_com/xuanhun/201107/201107021154179344.gif"></a>
圖11-52 設定IIS的SSL
現在我們再次運作測試站點,結果如圖11-53。
<a href="http://images.cnblogs.com/cnblogs_com/xuanhun/201107/201107021154192541.gif"></a>
圖11-53 Certificate驗證成功
圖11-53中成功的傳回證書辨別和驗證類型X509,說明服務端對用戶端證書的驗證成功.
本文轉自懸魂部落格園部落格,原文連結:http://www.cnblogs.com/xuanhun/archive/2011/07/02/2096198.html,如需轉載請自行聯系原作者