<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      [WCF安全系列]認證與憑證:X.509證書

      在《上篇》中,我們談到了常用的認證方式:用戶名/密碼認證和Windows認證。在下篇中,我們著重來介紹另外一種重要的憑證類型:X.509證書,以及針對X.509證書的認證方式。不過為了讓讀者能夠真正地全面地了解X.509證書,我們需要先了解一些關于非對稱密碼學的背景知識。

      目錄
      一、非對稱密碼學(Asymmetric Cryptography)
          消息加密(Encryption)
          數字簽名(Digital Signature)
      二、數字證書
          數字證書的頒發機制
          創建數字證書
      三、通過憑證三個屬性來分析X.509證書

       

      一、 非對稱密碼學(Asymmetric Cryptography)

      按照維基百科的定義,密碼學(Cryptography)一種關于信息隱藏(Hiding Information)的研究或者實踐。當代密碼學是一種跨學科的研究,涉及的學科主要包括數學、計算機科學和工程學。站在消息交換的角度,密碼學就是幫助我們實現對整個消息或者對消息的某個部分進行數字簽名和加密的理論和方法。

      數字簽名和加密依賴于相應的加密算法(Cryptographic Algorithm),從數學的角度來講,加密算法是就是將被加密的數據和密鑰作為自變量,將加密后的數據作為因變量的函數。與加密相對的操作是解密。按照加密和解密采用的密鑰是否相同,我們將加密算法分為對稱加密算法和非對稱加密算法。前者采用相同的密鑰進行加密和解密,后者則采用一組相互配對的密鑰分別進行加密和解密。對于非對稱加密,我們選擇秘鑰對中某一個密鑰對消息進行加密,該密文只有通過另一個秘要方能解密。非對稱密碼學具有兩個主要的應用:

      • 直接通過對消息進行加密解決機密性問題;
      • 通過數字簽名實現身份認證和數據一致性的問題。

      消息加密(Encryption)

      非對稱加密依賴一組由公鑰/私鑰(Public Key /Private Key)組成的密鑰對,所以采用非對稱加密又被稱為公鑰加密(Public Key Cryptography)。具體來說,公鑰和私鑰均可以用于加密。如果密鑰對中的其中一個用于加密,另一個則用于解密。公鑰公諸于眾,不具有隱私性,任何人均可以獲??;而私鑰專屬于擁有該密鑰對的實體,屬于絕對隱私。

      對于消息交換來說,通過非對稱的方式對消息進行加密是能夠確保消息的機密性。具體的做法是:消息的發送方采用接收方的公鑰進行加密,接收方通過自己的私鑰進行解密。由于私鑰僅供接收方所有,所有其他人不能對密文進行解密。

      數字簽名(Digital Signature)

      我們所說的數字簽名實際上包括兩項主要的工作,簽名(Signing)和檢驗(Verification),前者創建一個數字簽名,后者驗證簽名的有效性。接下來,我們來簡單介紹一下在消息交換場景下的簽名和檢驗是如何實現的。

      image

      簽名的過程其實很簡單,整個流程如上圖所示。整個流程包括兩個步驟:首先,發送方首先采用某種算法對整個消息的內容實施哈希計算,得到一個哈希碼。然后,發送使用自己的私鑰對該哈希碼就行加密,加密后得到的密文就是數字簽名。該數字簽名最終會連同發送方密鑰對中的公鑰(該公鑰一般會內嵌于一個數字證書中)附加到原消息上一并發予接收方。

      這三項被接收方接收之后,它就可以借助這個數字簽名驗證發送方的真實身份和消息的完整性,這個過程被稱為數字簽名的驗證。整個數字簽名檢驗流程如下圖所示。首先,原消息被提取出來,通過相同的哈希算法得到一個哈希碼。然后,數字簽名被提取出來,采用相同的算法利用公鑰對數字簽名進行解密,得到生成數字簽名的那個哈希碼。兩個哈希碼進行比較,如果一致則可以證明數字簽名的有效性以及消息本身的完整性。

      image

      采用非對稱密碼學對消息加密解決的是消息的機密性問題,而數字簽名的作用則體現在如下三個方面:

      • 身份認證(Authentication):數字證書可以幫助我們驗證消息發送源的真實身份,因為數字簽名的內容是由一個私鑰決定的,發送方只有通過專署于他的密鑰對中的私鑰生成數字簽名,采用通過對方利用公鑰實施的數字簽名檢驗。而私鑰是屬于擁有者的私密信息,不對外公開的。對數字證書的檢驗實際上就確認消息的發送源是否是私鑰的真正擁有者。
      • 防止抵賴(Non-repudiation):防止抵賴在這里的代表對于接收到的經過數字簽名的消息,如果接收方采用某個實體的公鑰對數字簽名檢驗成功,那么這個實體就是消息的發送方,不容對方抵賴。原因很簡單,能夠通過公鑰對某個數字簽名成功檢驗,證明生成該數字簽名使用的是正確的私鑰。
      • 消息一致性(Integrity):而數字簽名確實可以確保整個消息內容的一致性的,因為最初被用于私鑰加密的哈希碼是針對整個消息的內容進行哈希計算獲得的。消息的內容一旦出現任何的改變,最終對數字簽名的檢驗都將失敗。

      在上面介紹數字簽名的流程時,我們說發送方的公鑰會連同生成的數字簽名會附加到消息中,一并傳送給接收方,以輔助接收方對發送進行身份驗證。實際上,這個公鑰在一般情況下是通過數字證書的形式進行傳遞的。數字證實在這里作為發送方的憑證,現在我們就來簡單介紹一下數字證書。

      二、數字證書

      證書,又稱數字證書(Digital Certificate)或者公鑰證書(Public Key Certificate),是一種數字簽名的聲明,它將公鑰的值綁定到持有對應私鑰的個人、設備或服務的標識。由于大多數普通用途的證書基于 X.509 V3 證書標準,所以我們有將其稱為X.509證書。X.509證書廣泛地被應用于加密(Encryption)和數字簽名(Digital Signature),以提供認證的實現和確保數據的一致性(Integrity)和機密性(Confidentiality)。

      站在公鑰密碼學的角度來講,X.509證書就是一個將某個密鑰對中的公鑰與某個主題(Subject)進行綁定的文件。具體來講,和公鑰進行綁定的不僅僅包括相應主題的可辨別名稱(DN:Distinguished Name),可以包括主題相關的其它可選名稱,比如Email地址、DNS名稱等。

      下面的代碼片斷體現了一個X.509證書的大體結構。其中包括版本號(V3)、序列號(7829)、簽名算法(md5WithRSAEncryption)、頒發者(CN=Root Agency)、有效日期(April ?07, ?2011 3:37:45 PM到January ?01, ?2040 7:59:59 AM)、主題信息(CN = www.artech.com)、公鑰(00:b4:31:98:... 52:7e:41:8f)和公鑰算法(rsaEncryption)以及頒發者的數字簽名(93:5f:8f:5f:... b5:22:68:9f)。

         1: Certificate:
         2:    Data:
         3:        Version: V3
         4:        Serial Number: 7829 (0x1e95)
         5:        Signature Algorithm: md5WithRSAEncryption
         6:        Issuer: CN=Root Agency
         7:        Validity   
         8:            Not Before: ?Thursday, ?April ?07, ?2011 3:37:45 PM
         9:            Not After : ?Sunday, ?January ?01, ?2040 7:59:59 AM
        10:        Subject: CN = www.artech.com
        11:        Subject Public Key Info:
        12:            Public Key Algorithm: rsaEncryption
        13:            RSA Public Key: (1024 bit)
        14:                Modulus (1024 bit):
        15:                    00:b4:31:98:... 52:7e:41:8f
        16:                Exponent: 65537 (0x10001)
        17:    Signature Algorithm: md5WithRSAEncryption
        18:    93:5f:8f:5f: ... b5:22:68:9f

      數字證書的頒發機制

      數字證書在大部分場景中是作為證明某個實體身份的憑證被使用,而證書的主題部分的內容代表了該用戶憑證所代表的身份。那么我們的第一個問題是,我們為什么要信任這個證書?

      我們可以通過與日常生活中使用的證書進行類比,進而加深對數字證書的理解。比如居民身份證就是一種典型的證書,它的一個重要的特征就是該證書是由官方認可的合法機構頒發,一般情況下身份證的辦法機構就是戶口所在地的公安機關。對于數字證書,尤其是用于商業用途的數字證書,也具有相應的官方辦法機構,我們將這樣的機構稱之為認證權威機構(CA:Certification Authority,以下簡稱CA)。我們熟悉的CA包括VeriSign、Thawte(OpenSSL)等。證書的頒發機構體系是一個樹形結構,每一個CA可以具有一到多個子CA,最上層的CA被稱為根CA。

      在日常生活中,人們對居民身份證的普遍認可來源于對頒發機構,即戶口所在地的公安機關的信任。這種基于對頒發機構認可的方式同樣適合對數字證書。在一般情況下,認證方通過檢驗數字證書的CA的信任程度而作出對證書合法性的判斷。不過,現在的問題是:居民身份證具有若干防偽標識幫助認證方鑒別真偽,對于數字證書來說,我們采用怎樣的方式來判斷它是不是偽造的呢?驗證數字證書的有效性,需要防止以下兩種情況:

      • 用戶偽造一個證書以假冒與證書公鑰綁定的那個身份,并且該證書具有一個我們普遍認可的CA;
      • 用戶對CA頒發的證書進行篡改,改變公鑰或者其他身份信息。這兩個問題都可以通過數字簽名技術來解決。

      從上面給出的數字證書我們知道,證書中不僅僅包括CA的基本信息,還包括一個數字簽名和簽名采用的算法。CA通過自己的私鑰對證書的數據部分進行簽名,并將此簽名連同簽名采用的算法置于證書之中。按照我們前面介紹的關于數字簽名的原理,如果我們具有CA的公鑰,我們不僅僅可以驗證證書的CA,也能校驗證書的內容是否被篡改。那么在對證書進行驗證的時候,CA的公鑰從何而來呢?

      實際上,CA的公鑰也保存在一個數字證書之中,并被存儲于一個受信任的證書存儲之中。按照證書代表身份的不同,我們可以將其分為兩種類型:CA證書(CA Certificate)和終端實體證書(End Entity Certificate),其中前者代表CA,后者代表接受CA證書的最終實體。實際上,CA證書和終端實體證書并沒有本質的區別。除了最頂層的根CA,所有的CA證書頒發者是它的上一級CA,即上級的CA作為該CA證書的CA。CA的這種層級關系組成了一種信任鏈(Trust Chain)。

      為了存儲數字證書,Windows中具有相應的證書存儲區(Certificate stores)。根據目的或者信任范圍的不同,不同的證書被存儲于不同的存儲區。關于證書存儲,由于篇幅所限,我不會做過多的介紹,有興趣的朋友可以查閱MSDN在線文檔。對于證書存儲管理,MMC為你提供一個可視化的管理工具,你也可以通過Certmgr.exe工具已命令行的方式來進行。

      在若干證書存儲區中,有一個被稱為“受信任的根證書頒發機構”(Trusted Root Certification Authorities)的存儲區,它里面存儲的所有CA證書代表所信任的證書頒發機構。在默認情況下,對于一個待驗證的證書,如果基于該證書CA信任鏈上的任何一個CA在該存儲區中存在一個證書,那么這個證書是合法的。

      創建數字證書

      用戶對數字證書的認可決定于對證書頒發機構的信任,所以證書頒發機構決定了數字證書的可用范圍。由于官方認可的數字證書頒發機構,比如VeriSign、Thawte(OpenSSL),具有普遍的信任度,在大部分情況下是理想的選擇。但是對于學習研究或者開發測試,我們沒有必要去購買這些商用證書,采用利用一些工具以手工的方式創建證書。

      由于WCF的安全機制廣泛使用到數字證實,我們很有必要學會手工創建數字證書。微軟為我們提供了一個強大的創建數字證書的工具MakeCert.exe,我們可以借助這個工具采用命令行的方式創建我們需要的數字證書。MakeCert.exe具有很多命令行開關,限于篇幅的問題不可能對它們一一介紹,在這里僅僅對幾個常用的開關作一下簡單的介紹,有興趣的讀者可以查閱MSDN在線文檔了解MakeCert.exe所有命令行開關的含義,對應的地址為http://msdn.microsoft.com/zh-cn/library/bfsktky3(v=vs.80).aspx。

      • -n x509name:指定主題的證書名稱。最簡單的方法是在雙引號中指定此名稱,并加上前綴CN=,例如,"CN=My Name";
      • -pe:將所生成的私鑰標記為可導出,這樣可將私鑰包括在證書中;
      • -sr location:數字證書的存儲位置,具有兩個可選值:CurrentUser(和LocalMachine。前者基于當前登錄用戶,后者基于本機;
      • -ss store:數字證書的存儲區;
      • -sky keytype:指定主題的密鑰類型,必須是 signature、exchange 或一個表示提供程序類型的整數。默認情況下,可傳入1表示交換密鑰,傳入2表示簽名密鑰。

      比如我通過下面的命令會創建一個主題名稱為www.artech.com的數字證書,該證書具有交換密鑰類型,并且包含私鑰。

         1: MakeCert -n "CN=www.artech.com" -pe -sr LocalMachine -ss My -sky exchange

      一旦上面的命令成功執行,生成的證書會自動保存到基于本機的個人(Personal)存儲區中。你可以通過MMC的證書管理單元(Snap-in)查看該證書, 關于如何通過MMC查看證書,可以參考這個地址:http://msdn.microsoft.com/zh-cn/library/ms788967.aspx。下圖是證書MMC管理單元的截圖,你可以看到我們創建的數字證書已經被存儲到了我們在命令行中指定的存儲區,頒發機構被默認設定為Root Agency。

      image

      三、通過憑證三個屬性來分析X.509證書

      在上面中我們站在非對稱密碼學得角度對數字證書進行了相應的介紹,在這里我們從用戶憑證的角度進一步地認識數字證書。我們照例采用用戶憑證的三個屬性來分析數字證書。

      • 憑證與申明的一致性:證書的申明反映在于公鑰綁定的于主題相關的信息;
      • 持有人對憑證的擁有性:在絕大部分的認證過程中,都需要被認證方提供的數字證書具有相應的私鑰。私鑰的私有性在某種程度上證明了數字證書持有者就是該證書的擁有者;
      • 證書的合法性:這可以通過頒發者對證書的數字簽名來驗證。

      如果被認證方通過一個數字證書作為用戶憑證,認證方一般采用信任鏈(Trust Chain)模式對其實施認證。在該模式下,認證方從數字證書的直接頒發機構向上追溯,如果具有任何一個頒發機構是受信任的,那么認證成功。不過,有時我們還是會采用其他的認證模式,比如嚴格比較證書主題信息甚至是序列號。

      對于WCF來說,不僅僅客戶端可以將數字證書作為證明自己身份的憑證,提供給服務端對自己進行認證。也可以將服務和某個數字證書綁定起來,通過證書代表服務的身份,供客戶端進行驗證。總之,數字證書在WCF中具有十分廣泛的應用。

      posted @ 2011-05-23 20:55  Artech  閱讀(12697)  評論(15)    收藏  舉報
      主站蜘蛛池模板: 无码熟妇人妻av在线电影| 国产精品国产三级国产午| 日本中文字幕有码在线视频| 精品亚洲AⅤ无码午夜在线| 精品中文人妻在线不卡| 无码一区二区三区视频| 国产精品成人久久电影| 极品少妇xxxx| 免费看国产精品3a黄的视频| 国产偷拍自拍视频在线观看| 成人精品一区日本无码网| 欧美成年黄网站色视频| 国产三级精品福利久久| 91国在线啪精品一区| 国产亚洲精品中文字幕| 十八禁国产一区二区三区| av一区二区中文字幕| 精品国产av无码一区二区三区| 欧美丰满熟妇性xxxx| 精品亚洲无人区一区二区| 亚洲综合天堂一区二区三区| 亚洲精品日韩在线观看| 色av专区无码影音先锋| 国产成人综合网在线观看| 久久毛片少妇高潮| 在线播放国产精品三级网| 97视频精品全国免费观看| 亚洲 校园 欧美 国产 另类| 国产精品成人一区二区不卡| 成年午夜免费韩国做受视频| 国产精品久久国产丁香花| 97se亚洲国产综合在线| 临武县| 欧美国产成人久久精品| 久操热在线视频免费观看| 日韩AV高清在线看片| 人妻系列无码专区免费| 欧美日韩中文字幕久久伊人 | 亚洲国产高清av网站| 东京热大乱系列无码| 毛片无码一区二区三区|