WCF 第八章 安全 基于证书的加密
證書以及它們所提供的聲明是一個安全的提供身份的通用方法。它們提供了一個魯棒性的安全架構可以讓它們非常適合加密和認證。WCF使用X.509工業標準證書,它被很多技術提供商廣泛采用。互聯網瀏覽器和互聯網服務器使用這個標準來存儲加密密鑰并在網絡上為SSL通信簽名。證書提供強加密而且很容易理解和文檔化。
? 證書的主要劣勢是從第三方授權組織獲取它們用于生產的代價以及呈現它們的復雜度。你如何分發證書?如果一個證書被偷了你該怎么做?在一個證書丟失了后你如何恢復數據?如果你在一個客戶端電腦上存儲證書,你如何從其他地方訪問信息?有很多解決方案處理了這些問題,從在一個局域網內部或者在公共互聯網上將證書存儲到一個目錄中,到將證書存儲到我們可以放到口袋里的智能卡片上。不考慮呈現方案,證書是加密和認證問題的一個非常好的選擇。
概念
使用非對稱密鑰來加密消息的概念總體上來說很簡單。想象一個可以使用一個密鑰加密任意字符串并使用另外一個密鑰對其解密的算法。現在想象我有一對兒這樣的密鑰,我讓它們中的一個是公共的以便于互聯網上的所有人都可以看到它,但是我讓另外一個是私有的以便于只有我可以看到它。如果我的朋友想給我發送一條消息,他尋找我的公共密鑰,運行算法加密消息,然后發送它。如果加密的消息被我的敵人截獲,那個人不能讀取它因為只有我,有我的私有密鑰,可以解密消息。當我發送一個反饋給我的朋友時,我尋找他的公共密鑰,運行算法來加密反饋,然后發送。再次,只有他可以解密加密的消息,所有它將在我們倆之間保密。
? 但是相反的是數字簽名使用消息加密。一個數字簽名是一個使用私有密鑰加密的簡單字符串以便于它只可以使用相關的公共密鑰來解密。對那個字符串(例如,我的名字)的正確解密是公共信息,所有在一些人使用我的公共密鑰解密消息后,那個人可以確定我的名字存儲在消息中。
? 信賴是證書的另一個重要方面。在我們的與一個朋友交換消息的例子中,我們怎么知道我們有我們朋友的公共密鑰而不是我們敵人的?對一個客戶端和服務端來說要確定彼此的證書是正確的,合法的而且沒有,它們必須信賴一個公共權威機構。如果客戶端和服務端使用不同權威組織頒發的證書,只要這些證書都信賴一個第三方的,公共的權威組織就是可以的。公共權威組織通常被引用為根權威組織,一般是自我簽名,意味著它不信賴任何其他人或組織。當一個客戶端從一個服務的接收一個證書,它查看服務證書的證書路徑來看是否這個路徑是合法的并在一個可信賴權威組織驗證。如果這樣,客戶端就認為證書是合法的;如果不是,它就會拒絕它。WCF中有規則來禁止證書路徑驗證以便于在開發和測試時可以使用不被信賴的證書。
創建
證書可以在傳輸安全或消息級別安全使用。一個常用的傳輸層加密選項是SSL,通過在服務端使用一個證書來實現傳輸加密。消息層加密在獨立的消息上使用。而基于傳輸層的加密要求在服務端安裝一個證書,基于消息的加密支持客戶端/服務端證書等很多模式。
? 這章的"傳輸層安全"和"消息層安全"中的例子將使用兩臺機器: 一臺Vista桌面機和一臺Windows Server 2003.桌面機有一個證書,MyClientCert.服務有一個證書MyServerCert.列表8.2顯示了運行在Vista上用來生成必要證書的命令。Makecert.exe創建一個證書。-pe選項讓私有密鑰可以導出。-n選項定義證書的名字并將用于驗證。-sv選項定義私有密鑰文件。-sky選項可以是"交換"或者一個數字簽名。Pvt2pfx是一個可以將私有密鑰和公共密鑰聯合為一個單獨文件的實例。
? 如果你在一臺機器上開發,將MyServer的名字改成localhost.所有其他的命令保留一致。
提示 生產環境證書
要記住在這個例子中生成的證書不應該在生產場景中使用。生產環境中使用的證書應該從一個可信賴的第三方證書授權機構請求。
列表8.2 生成證書
makecert.exe -r -pe -sky exchange
??????????????????? -n "CN=MyClientCert" MyClientCert.cer
??????????????????? -sv MyClientCert.pvk
pvk2pfx.exe? -pvk MyClientCert.pvk
??????????????????? -spc MyClientCert.cer
??????????????????? -pfx MyClientCert.pfx
makecert.exe -r -pe -sky exchange
????????????????????-n "CN=MyServer.com" MyServerCert.cer
??????????????????? -sv MyServerCert.pvk
pvk2pfx.exe? -pvk MyServerCert.pvk
?????????????????? -spc MyServerCert.cer
?????????????????? -pfx MyServerCert.pfx
? .cer文件是公共密鑰,.pvk文件時私有密鑰,.pfx文件一個包含私有密鑰和公共密鑰的密鑰交換文件。下面的密鑰必須在微軟管理控制臺使用證書管理單元安裝。
? 1. 在服務端安裝下面的內容,在本機證書存儲器中:
????? a. 將MyServerCert.pfx 導入私有文件夾。這允許服務端解密使用它的公共密鑰加密的消息。它也允許服務端使用它的私有密鑰加密消息。
????? b. 將MyClientCert.cer導入可信賴人文件夾。這允許服務端解密由MyClientCert私有密鑰加密的消息,比如數據消息和認證用的數字簽名。它也允許服務端
?????????使用MyClientCert公共密鑰加密消息。
? 2. 在客戶端安裝下面內容,在當前用戶證書存儲器中:
????? a. 將MyClientCert.pfx導入私有文件夾。?這允許客戶端解密使用MyServerCert私有密鑰加密的消息,比如數據消息和用來驗證的數字簽名。它也允許客戶端
???????? 使用MyServerCert公共密鑰加密消息。
總結
以上是生活随笔為你收集整理的WCF 第八章 安全 基于证书的加密的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LINQ 方法查询
- 下一篇: 手势识别兼容Android 1.x和2.