(史帝芬, 2010/05/09, hi.steven@gmail.com)
WCF 的安全性可分為兩大層級 - 傳輸層及訊息層,詳細的介紹會在另個章節說明,這裡只介紹 SSL 機制。在 WCF 中採用SSL,是利用 X509 憑證於傳輸層將傳輸的封包加密處理,因為 SSL 是採用非對稱式加密,所以在 service 端會安裝憑證的 private key,並於 client 端安裝憑證的 public key。底下的範例是在如下的環境下完成的,確定有如此的環境後,依步驟完成即可。
- service 端放置於 Windows Server 2003 Enterprise Edition 的 IIS 上。
- client 端放置在 Windows 7 上,其上安裝有開發工具 Visual Studio 2008。
- 於 Windows 7 上解開附件 workspace.rar,並使用 Visual Studio 2008 開啟附件中的 solution 檔 ( MyCalculator.sln ),如果 solution 檔包含的兩個 project ( MyCalculator、MyClient ) 沒有被加入,請自行加入。並於「設定啟始專案」中讓兩個專案都啟動,且 service 端優先於 client 端。
- 於 Visual Studio 2008 中按「F5」開始偵錯,兩個 project 會同時啟動,並出現如下的 client 畫面,這是一個簡單的計算機,可以計算加減乘除,client 只有 UI,真正的計算會在 service 端執行,隨意輸入一些值測試一下,確定程式可以正常使用。
- 參考「裝載 WCF services 於 IIS」將 service 端程式部署到 Windows 2003 Server 的 IIS 上,試著用瀏覽器連連看,確定可正常執行。
- 修改 client 端 app.config 中的 endpoint address 值,將「http://localhost:3235/MyCalculator/Calculator.svc」改成「http://home2003e.idealist.idv.tw/MyCalculator/Calculator.svc」,這個網址視你部署的設定而異。再次啟動 client 端程式,應可連線到 service 端作運算,如果連線時出現「呼叫者未經過服務驗證」的錯誤訊息,那是因為 client 端的電腦可能沒有加入 service 端的網域,可以改一下 service 端的 web.config 及 client 端的 app.config 設定,將 security mode 都設成 None。要特別注意的是,.NET 3.5 在 Windows 7 上會有個 bug,當 security mode 設成 None 時,會於設定檔中加入「<extendedProtectionPolicy policyEnforcement="Never" />」這在舊版的 Windows 上並不支援,請手動將這行設定刪除 (參考附件 Web.config (第四步驟)、app.config (第四步驟)) 。修改完成後,再執行一次 client 端程式,確認可正常連線到 service 端運算。
- 參考「Windows 2003 Server核發IIS SSL憑證」產生憑證,並將它安裝到 service 端所在的 IIS 站台上 (如下圖), 從下圖中可以看到我的網站識別中的主機標頭值為「home2003e.idealist.idv.tw」,產生憑證時需確定輸入的網站名稱與這個名稱相符。

(未完待續...)
|
|