【實踐】WCF 傳輸安全 1 前期准備之證書制作


近幾日一直在學習WCF傳輸安全方面的知識,在園子里淘了好久,也查了不少資料,終於有所了解,遂成此文,與大家分享!

一、WCF中的安全方式

說到安全就會涉及到認證,消息一致性和機密性,WCF的安全方式分為兩種,即傳輸安全和消息安全。

傳輸安全和消息安全的區別:
傳輸安全提供點對點的安全: 比如 A 提供服務,B和C直接連接到A,這時候A與B 及 A與C直接的傳輸是安全的,如果B通過C連接到A,那么A與B直接是安全的,B與C之間是不安全的。
消息安全:是把安全機制都應用在消息級別上面的,能夠提供端對端的安全,不管消息的路由路徑多么復雜,也能保證消息的安全傳輸。
傳輸安全我們一般應用在局域網中,消息安全主要應用在復雜的互聯網環境中,傳輸安全有着消息安全不可比擬的優勢就是高性能。

二、如何制作證書

既然是傳輸安全就必然會用到SSL,Https,就會涉及到數字證書,數字證書的概念和原理我們就不介紹了,百度一下就Ok,我們只要知道它是為我們的服務器端和客戶端提供身份認證和能為我們的消息提供加密的東東就可以了。首先我們來演示一下制作證書的過程:

Windows server 系統都有證書服務的,我們可以通過添加證書服務來制作證書,具體操作可以參照這篇文章

我們后面的DEMO環境都是在Win7 +vs2010環境下面進行的,因此我們只能通過MakeCert命令方式創建證書,並通過netsh程序給端口注冊證書。

1、MakeCert 命令 可以通過 Visual Studio 命令提示輸入“ MakeCert”運行,命令主要參數介紹:(參數有很多,不一一列出,只列出我們使用的)

-n :證書的主題名稱;例如 -n "CN=計算機名稱"
-pe:將生成的私鑰標記可導出;
-sr:數字證書的位置(CurrentUser代表當前帳戶;LocalMachine代表本機)
-ss:證書的存儲區;-sky: 指定密鑰的類型(signature:簽名密鑰;exchange:交換密鑰)
-r :創建自簽證書

注意:-n "CN=計算機名稱" 默認為計算機名稱,實際項目中可以為網站的名稱,比如:wwww.xxx.com,當然你也可以使用其他名稱,但是在WCF調用的時候會有信任關系異常提示,Demo中我們會進行介紹

2、netsh.exe  位於 C:\Windows\System32 目錄下:

查看SSL證書的綁定:    netsh> http show sslcert
將證書與端口進行綁定: netsh>http add sslcert ipport=0.0.0.0:端口號 certhash=證書的指紋 appid={一個有效的GUID} 
刪除端口綁定的證書:    netsh>http delete sslcert ipport=0.0.0.0:端口 

三、制作一個證書並綁定到ip地址端口:

1、制作證書:

我們啟動Visual Studio 命令提示工具,然后輸入:makecert -sr localmachine -ss My -n "CN=Lx-PC" -sky exchange -pe -r,回車,提示成功!

如何查看這個證書呢?這個證書放到哪里了呢?

我們可以通過運行MMC命令打開控制台,選擇 “文件” 菜單中的 “添加或刪除管理單元” 打開該對話框,在彈出的對話框左面選擇 “證書” :

並點擊 “添加”  彈出 “證書管理” 對話框,我們選擇 “計算機帳戶” ,並點擊 “下一步” ,選擇 “本地計算機” 之后,點擊完成。當然還可以在繼續添加一個 “我的用戶帳戶”,如下圖:

點擊 “確定” 之后,我們可以在 “證書(本地計算機)” --“個人”--“證書” 節點中 ,看到我們創建的 “Lx-PC” 證書;

接下來要做的是將該證書加入到 “受信任的根證書頒發機構” 和 “受信任人” 節點中,至於為什么會這么做。舉個簡單的例子,身份證就是我們的證書,誰是可信任的頒發機構,當然是當地xxx公安單位了,如果不是權威機構發布的證書,那么該證書肯定是有問題的了。

我們 “右擊” 我們創建的證書,選擇 “所有任務”--“導出”,打開 “證書導出” 對話框,選擇 “下一步” 后,選擇 “是,導出密鑰”

並點擊 “下一步”,默認選擇“個人信息交換”,

繼續點擊 “下一步” ,輸入 密碼 “123456”,

點擊 “下一步” 后,選擇 “瀏覽” ,文件命名為 “lxpc.pfx”,並保存到桌面。

之后,我們分別右擊 “受信任的根證書頒發機構” 節點和 “受信任人” 節點,選擇 “所有任務” --“導入” 。選擇我們剛剛導出到桌面的lxpc.pfx 文件,並輸入 密碼123456,之后,就分別導入到兩個節點中了。

2、利用netsh 命令將制作的證書綁定到端口:

這時候我們需要查看證書的指紋: 雙擊我們的證書,選擇詳細信息標簽

記錄下該證書的指紋‎為:63c06b2292c76391fe075becb01e4a1f350a5a87

接着,我們通過windows 控制台 cmd,運行 netsh 命令,並輸入:

http add sslcert ipport=0.0.0.0:9000 certhash=‎63c06b2292c76391fe075becb01e4a1f350a5a87 appid={BFC5621F-EF33-1234-AD7E-51EDDAEC5234}

結果顯示:

我們可以利用 netsh> http show sslcert 來查看我們的證書是否綁定到了9000端口:

由圖可見:我們已經將我們剛剛制作的證書 綁定到了 9000端口。

好了,前期證書工作准備完成,下一篇我們來通過利用證書通過SSL實現一個對服務器端進行認證,但是對客戶端采用匿名方式的WCF 例子。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM