程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> WSE3.0構建Web服務安全(2)

WSE3.0構建Web服務安全(2)

編輯:關於.NET

WSE3.0構建Web服務安全(2)非對稱加密、公鑰、密鑰、證書、簽名的區別和聯系以及X.509 證書的獲得和管理

上一節文章WSE3.0構建Web服務安全(1):WSE3.0安全機制與實例開發,寫處來以後感覺還是需要補充一下這個加密相關概念的文章,因為很多概念容易混淆,在理解WSE3.0構建Web服務安全的時候遇到了麻煩。為了更好第學習WSE3.0編程開發,我特地整理了加密、公鑰、證書、簽名的知識點,來闡述這些概念的區別和聯系,最後會詳細介紹X.509 證書的信息,以及如何的獲得X.509 證書和管理X.509 證書。全文結構如下1.非對稱加密算法2.公鑰和私鑰、3.證書和簽名、4.X.509 證書的獲得和管理。5總結

上一節裡以及對.net類庫提供的加密算法進行了介紹,下面我們了解詳細了解一下非對稱加密算法。

【1】非對稱加密算法:

非對稱加密算法又稱為公鑰加密算法,按照密碼學的Kerckhoff原則:“所有算法都是公開的,只有密鑰是保密的”。即安全系統的設計者不能指望使用某種秘密的無人知道的算法來保密,而應當使用一種公開的被驗證過的算法——只要密鑰是安全的,已知算法的攻擊者實際上無法破解秘文的算法才是好的算法。

RSA算法是目前最流行的公鑰密碼算法,它使用長度可以變化的密鑰。RSA是第一個既能用於數據加密也能用於數字簽名的算法。RSA算法的原理如下:

1.隨機選擇兩個大質數p和q,p不等於q,計算N=pq;

2.選擇一個大於1小於N的自然數e,e必須與(p-1)×(q-1)互素。

3.用公式計算出d:d×e = 1 (mod (p-1)×(q-1)) 。

4.銷毀p和q。

最終得到的N和e就是“公鑰”,d就是“私鑰”,發送方使用N去加密數據,接收方只有使用d才能解開數據內容。

RSA的安全性依賴於大數分解,小於1024位的N已經被證明是不安全的,而且由於RSA算法進行的都是大數計算,使得RSA最快的情況也比DES慢上好幾倍,這也是RSA最大的缺陷,因此它通常只能用於加密少量數據或者加密密鑰。需要注意的是,RSA算法的安全性只是一種計算安全性,絕不是無條件的安全性,這是由它的理論基礎決定的。因此,在實現RSA算法的過程中,每一步都應盡量從安全性方面考慮。

非對稱加密算法實現機密信息交換的基本過程是:甲方生成一對密鑰並將其中的一把作為公用密鑰向其它方公開;得到該公用密鑰的乙方使用該密鑰對機密信息進行加密後再發送給甲方;甲方再用自己保存的另一把專用密鑰對加密後的信息進行解密。甲方只能用其專用密鑰解密由其公用密鑰加密後的任何信息。 非對稱加密算法的保密性比較好,它消除了最終用戶交換密鑰的需要。

【2】公鑰和私鑰:

對稱加密算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數據進行加密,那麼只有用對應的公開密鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種算法叫作非對稱加密算法。

公鑰加密:公鑰加密使用一個必須對未經授權的用戶保密的私鑰和一個可以對任何人公開的公鑰。公鑰和私鑰都在數學上相關聯;用公鑰加密的數據只能用私鑰解密,而用私鑰簽名的數據只能用公鑰驗證.NET 通過抽象基類 (System.Security.Crytography.AsymmetricAlgorithm) 提供下列非對稱(公鑰/私鑰)加密算法:

• DSACryptoServiceProvider • RSACryptoServiceProvider

因此公鑰和私鑰在非對稱加密算法裡是成對出現的,公鑰公開出來用來加密數據,誰都可以使用這個公鑰對自己傳遞的數據加密。私鑰所有者通過自己的私鑰對數據進行解密,私鑰一般只有所有者知道,因此別人截獲數據也無法破譯信息的內容。

【3】證書和簽名:

證書實際對於非對稱加密算法(公鑰加密)來說的,一般證書包括公鑰、姓名、數字簽名三個部分。證書好比身份證,證書機構(ca)就好比是公安局,職責就是負責管理用戶的證書也就是身份證。

比如我的公鑰是FrankKey,姓名是Frank Xu Lei。公安局可以給我登記,但是怎麼保證我和別的Frank Xu Lei區別開呢,於是公安局(證書機構)就使用我的名字和密鑰做了個組合,再使用一種哈希算法,得出一串值,來標識我的唯一性,這個值就是我的身份證號碼,也就是證書裡的數字簽名。

假設一個朋友給我寫信,他就可以到公安局(證書機構)來查找我的身份證(證書)。上面包括我的個人信息,可以保證這個公鑰就是我的。然後他把新建進行加密,郵寄給我。別人即使拆開我的信件,因為沒有密鑰進行解密,所以無法閱讀我的信件內容。這樣就保證了信息安全。

所以說加密不一定要證書,取決於你數據安全具體的需求。一般大型的電子商務網站都有自己特定的證書。證書管理的機構比較有名的就是VeriSign(可以說是互聯網上的身份證管理局)。企業可以申請注冊,它會給申請者生成特定的簽名。

我們自己的企業內部應用如果需要的話,可以在企業局域網內部建立企業私有的證書服務器,來產生和管理證書。

其實X.509是由國際電信聯盟(ITU-T)制定的一種定義證書格式和分布的國際標准(相當於制作身份證的規范)。為了提供公用網絡用戶目錄信息服務,並規定了實體鑒別過程中廣泛適用的證書語法和數據接口, X.509 稱之為證書,或者說是身份證的一種形式,類似與我們現在的二代身份證,也是身份證的一種,根據特定的標准制作出來的。 另外證書使用的時候還有有效期的限制,和我們的身份證的10年有效期一樣。證書也可以設置有效期。

【4】X.509 證書的獲得和管理:

【4.1】免費數字證書:獲得免費數字證書的方法有很多,目前國內有很多CA中心提供試用型數字證書,其申請過程在網上即時完成,並可以免費使用。下面提供一個比較好的站點,申請地址為https://testca.netca.net/。注意只有安裝了根證書(證書鏈)的計算機,才能完成申請步驟和正常使用。推薦另外一個可以免費申請證書的CA:http://www.cacert.org/

【4.2】從CA獲得:商業應用最好從證書的簽發機構CA獲得證書,比如VeriSign證書服務機構,這樣商業CA服務機構的證書已經廣泛使用,有的系統默認為可信任的證書簽發機構。但是證書需要付費。

【4.3】windows Server 2003證書服務:在windows Server 2003中安裝證書服務器,這樣windows Server 2003服務器即可當做一個證書服務機構CA,可以申請簽發證書。也就是私有的身份證辦法和制作機構,好比很多企業裡的胸卡,HR就可以自己制作,但是使用范圍只限制在企業內部。

【4.4】makecert工具:

微軟在.Net Framework 重集成了一個生成X.509數字證書的命令行工具Makecert.exe。使用的的命令行在VS2005命令行窗口裡啟動,輸入一下參數:

makecert -sr CurrentUser -ss My -n CN=FrankCertificate -sky signature -pe

可以殘生以個簽名的密鑰。運行時候可以得到相應的操作提示:如圖

具體的參數說明:詳細幫助文檔:http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cptools/html/cpgrfcertificatecreationtoolmakecertexe.asp

-sr CurrentUser  -- 證書存儲位置。Location 可以是 currentuser(默認值)或 localmachine

-ss My  --  證書存儲名稱,輸出證書即存儲在那裡。My表示保存在“個人”

-n CN=MyTestCert -- 證書名稱。此名稱符合 X.500 標准。最簡單的方法是在雙引號中指定此名稱,並加上前綴 CN=;例如,"CN=FrankXu"。

-sky exchange --  指定頒發者的密鑰類型,必須是 signature、exchange 或一個表示提供程序類型的整數。默認情況下,可傳入 1 表示交換密鑰,傳入 2 表示簽名密鑰。

-pe --  私鑰標記為可導出。這樣私鑰包括在證書中。

這個命令生成一個名字為FrankCertificate的證書,被保存到了當前用戶的個人證書存儲區內。一般我們自己開發使用的Windows證書服務來管理和獲取證書。

【5】總結:

通過以上的學習,不知道你清除了非對稱加密、公鑰、密鑰、證書、還有簽名的之間的區別和關系沒有。在說明證書概念的時候我使用身份證做了類比,並把證書服務機構和管理身份證的公安局做比較來闡述證書的概念。最後基於上面證書概念的理解,本文又詳細介紹X.509 證書的相關的知識,以及如何的獲得X.509 證書和管理X.509 證書。

希望本文能對你的安全知識的學習和網絡安全編程提供幫助。有問題的園友也可以繼續留言交流,我會盡我所知與大家交流和分享我的學習心得。後面我會繼續准備《WSE3.0構建Web服務安全》的第3節,如何使用WSE3.0 策略配置來實現密碼加密與驗證。有興趣的朋友可以繼續關注~

系列文章:WSE3.0構建Web服務安全(1):WSE3.0安全機制與實例開發

參考資料:

1.AsymmetricAlgorithm ,MSDN

2.SSH裡非對稱密鑰(公鑰,私鑰)及認證中心原理,http://www.javaeye.com/topic/216912

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved