WCF開發框架形成之旅 如何實現X509證書加密

2021-09-22 13:53:31 字數 3800 閱讀 2399

在前面幾篇文章,均介紹了一些wcf服務的開發經驗,對於資料的加密傳輸,重要性不言而喻。關於在wcf使用證書加密的重要性,在上篇隨筆《

》 有詳細的介紹,特別對於重要的、敏感的資料,加密傳輸非常重要。

首先先介紹一下前人對wcf開發中應用證書加密的一些思路介紹,個人覺得比較靠譜的是這兩篇文章

1、 2、 using certificate-based authentication and protection with windows communication foundation (wcf)

第一篇文章基本已經介紹了證書加密操作的相關步驟了:建立證書、配置服務及客戶端節點。不過沒有說明我們一般通過那樣建立的證書,其實是臨時用的測試證書,不在配置檔案的certificatevalidationmode屬性中使用除了「none"屬性外的值,否則就不能順利執行呼叫服務。這個問題其實可以通過在windows2003中部署證書服務來建立合格的證書,具體可以參考文章實現:

另外作者可能也只是在一台開發機器上部署服務和呼叫客戶端或者是xp系統,因此也沒有考慮給iis授權的問題,因為在windows2003等伺服器機器上,要給iis授權才能訪問證書,需要使用winhttpcertcfg.exe或者certmgr.exe來實現證書的授權等操作,在這方面,文章 介紹的有一點靠譜了,不過了解整篇文章卻無助完整測試wcf服務的應用

綜上所述,要成功部署基於x509證書加密的操作,需要這幾方面的知識和操作步驟。

1、 建立wcf服務應用以及呼叫客戶端。

2、 建立客戶證書和服務端的x509證書

3、 配置服務端的配置檔案,使之使用x509證書服務。

4、 授權iis訪問伺服器證書

5、 在伺服器證書管理中匯入伺服器端證書

6、 在客戶端匯入客戶端證書,完成x509證書配置並呼叫服務。

下面就這幾方面分別介紹相關的處理。

1、建立wcf服務應用以及呼叫客戶端。

》,使用這種方式構造的開發框架,各層職責比較分明,而且方便管理。

2、 建立客戶證書和服務端的x509證書

在vs2008 的dos命令提示中,輸入下面的指令即可建立相關的伺服器和客戶端證書

makecert.exe -sr localmachine -ss my -a sha1 -n cn=parkingserver -sky exchange -pe

屬性

解析

-sr指定的證書儲存區中的登錄檔位置。 

currentuser 

指定註冊版儲存位置為 hkey_current_user. 

localmachine 

指定註冊版儲存位置為 hkey_local_machine.

-ss指定證書儲存的位置。

-a指定相關的演算法,可以選擇 md5 演算法或者 sha1演算法

-n指定證書的名稱。該名稱遵循x.500命名標準。簡單例子如 "cn=myname" 格式,如果沒有指定/n開關,證書預設的名稱是"joe's software emporium"。

-sky

證書鍵型別。可以設定為 exchange 或者 signature。

-pe證書可匯出

建立證書成功後,我們在開發的機器上就可以看到兩個不同的證書了。

要看這兩個證書,需要執行下面操作, 開始-》執行-》mmc.exe=》在控制台中選擇檔案=》新增/刪除管理單元=》新增=》選擇證書=》彈出證書管理單元選擇計算機賬戶,預設下一步確定回來,就看到下面的介面。

在上面我們可以看到建立在localmachine賬戶下的證書,我們雙擊檢視證書可以看到這個證書是乙個不受信任的證書,但是我們還是可以使用的,只是需要在web.config配置資訊中,certificatevalidationmode 屬性指定為none,而不能指定其他信任值。

3、 配置服務端的配置檔案,使之使用x509證書服務。

根據建立的證書資訊,我們修改web.config檔案,使之應用x509證書加密,如下所示。關鍵的地方是設定驗證方式使用證書。

security 

mode

="message"

>

<

message 

clientcredentialtype

="certificate"

/>

security

>

而證書的相關資訊指定如下。

<

="parkingserver"

x509findtype

="findbysubjectname"

storelocation

="localmachine"

storename

="my"

/>

web.config 部分內容:

4、授權iis訪問伺服器證書

要解決上面的錯誤, 只需要給相應的賬號分配許可權即可,這裡iis訪問證書金鑰的許可權可以通過winhttpcertcfg.exe來處理,只需要通過命令列執行該程式即可,如下所示。

執行命令後,在執行wcf服務,一切ok了

這裡另外也介紹下winhttpcertcfg.exe來進行處理的幾個命令。

列出證書的授權列表

給iis的networkservice賬戶以基於證書名稱模式授權

給iis的networkservice賬戶以基於證書檔案模式授權

移除賬號對於證書的授權

5、在伺服器證書管理中匯入伺服器端證書

完成以上步驟,如果服務配置檔案正確,基本上在開發機器上不會有什麼問題了,但是如果把服務部署到另外一台伺服器機器上,那麼就會可能出現找不到證書的錯誤。因為服務還沒有匯入建立好的證書呢。

首先我們在開發機器上,在證書的控制台中選定服務端證書並匯出即可把服務端證書匯出到檔案中,如下圖所示。

記得在匯出的時候選擇帶私鑰的選項即可,匯出的檔案儲存為parkingserver.pfx。然後我們在伺服器中,在相同的控制台中把服務端的證書匯入即可使得wcf服務在伺服器中也可以正常訪問了。

6、 在客戶端匯入客戶端證書,完成x509證書配置並呼叫服務

如果客戶端需要部署很多個,那麼每個客戶端需要把第二步建立的客戶端證書匯入,才能正常方便伺服器的wcf服務,否則會出現證書的各種提示錯誤。

如果這些操作完成,那麼真誠恭喜你,真的可以使用wcf服務了,而且是使用了x509證書加密的wcf服務。 

WCF開發框架形成之旅 如何實現X509證書加密

在前面幾篇文章,均介紹了一些wcf服務的開發經驗,對於資料的加密傳輸,重要性不言而喻。關於在wcf使用證書加密的重要性,在上篇隨筆 有詳細的介紹,特別對於重要的 敏感的資料,加密傳輸非常重要。首先先介紹一下前人對wcf開發中應用證書加密的一些思路介紹,個人覺得比較靠譜的是這兩篇文章 1 2 usin...

WCF開發框架形成之旅 您的資料是否需要加密

中,介紹了我自己的winform開發框架的一些基礎知識及擴充套件而成的wcf開發框架,上篇隨筆只是基於快速應用搭建而成的wcf框架,並沒有考慮到資料安全性的問題,在網際網路的環境中,資料的安全性是必須考慮的一道門檻,否則明文資料滿天飛,猶如人在大街上裸奔一樣令人不安,除非是你認為你的應用資料無關緊要...

Wcf框架學習之旅

wcf是什麼 wcf就是專門用於服務定製 發布與執行以及訊息傳遞和處理的一組專門類的集合,也就是所謂的 類庫 這些類通過一定方式被組織起來,共同協作,並為開發者提供了乙個統一的程式設計模式。wcf之所以特殊,是在於它所應對的場景與普通的.net類庫不同,它主要用於處理程序間乃至於機器之間訊息的傳遞與...