演示:在PKI的環境中對電子郵件進行數字簽名與加密

技術小阿哥發表於2017-11-14

可以使用非對稱式金鑰來完成對電子郵件的保護,其中包括加密與數字簽字,而整個基於非對稱式金鑰加密保護電子郵件的實現依賴於PKI結構中的證書。使用證書來保障電子郵件的安全,需要注意如下事項:

ü如果要確保電子郵件的私密性,就必須要使用郵件接收者的公鑰來加密。

ü如果要使數字簽字來保證完整性、就必須使用郵件傳送者的私鑰來加密。

ü無論是郵件的傳送者還是接收者必須都信任相互的證書和證書頒發機構。

ü電子郵件程式本身必須支援使用證書來完成簽名和機密性保障。


注意:典型支援PKI結構的郵件服務系統有outlookfoxmail


演示目標:PKI架構環境中,使用證書來完成對電子郵件的數字簽名和加密。

演示環境:如下4.1所示


000600158.png

演示工具:微軟windows 2003整合的POP3CAoutlook元件。

演示步驟:

第一步:教師引導學生搭建電子郵件服務的環境,其中包括如何使用windows 2003整合的POP3元件來完成郵件伺服器的搭建、為郵件交換配置DNS區域和MX記錄、配置郵件客戶端outlook,最終應該得到如下圖4.2所示的郵件服務環境。


000642171.png

第二步架設基於獨立環境的CA伺服器,關於獨立環境中CA伺服器的部署,請參看專案三,在專案三中有詳細的描述,在這裡就不再重複,最終應該得到如下圖4.3所示的介面。

000734532.png

第三步:現在電子郵件使用者1向CA申請證書一張用於保護電子郵件安全的證書,在這個過程種使用Web頁面註冊的方式來完成證書申請,所以在部署證書伺服器時,必須為證書伺服器安裝IIS服務。使用者通過IE導航到證書伺服器的Web註冊頁面,如下圖4.4所示,請選擇“電子郵件保護證書”,然後出現如圖4.5所示填寫證書申請的標識資訊,在這個頁面中請使用者根據實際情況填寫,然後提交申請。

000815963.png

 當使用者完成證書申請的提交後,來證書伺服器上,會得到如4.6所示的一張被掛起的證書請求,證書伺服器的管理員審查該請求後,頒發該證書。

000854562.png


此時,使用者user1再次導航到證書伺服器的Web頁面,如4.7所示,可以看到一張已經被證書伺服器頒發的證書,請點選下載該證書,如果你成功的下載了該證書,可以在本地計算機上通過MMC管控臺開啟證書元件,開啟證書元件中的“個人”選項看到已經獲得的證書,如下4.8所示,證書上顯示有該證書的功能和作用,是誰頒發的,頒發給誰的。

000949226.png

注意:在該步驟中暫時只為使用者user1申請併發放證書,因為教師會在後面的演示步驟中刻意的製造故障,來為大家區別數字簽名與加密的差異!當大家理解了相關的差異後,再來為使用者user2申請證書完成整個演示。


第四步:現在電子郵件使用者user1使用證書來完成對郵件內容的數字簽字與加密,注意這個演示過程,重點是在於引導提問的思考方向,具體問題和操作過程如下所述:


引導性提問1:如果此時user2任何證書,當使用者user1使用證書完成對電子郵件的數字簽名,然後將經過user1數字簽名的郵件傳送給user2,會發生什麼樣的情況?user2能看到這封被user1數字簽名的郵件嗎?user2能完全確保該郵件沒有被中間的某個“惡棍”篡改嗎?

  首先在輸寫完成一封傳送給user2的電子郵件後,選擇工具工具數字簽名,如下圖4.9所示。然後填寫user2的郵件地址,並將郵件轉發。


001115869.png

現在另一臺計算機上使用在user2的電子郵件帳戶,進入user2的郵箱中,如下圖4.10所示,在user2的郵箱中出現一個安全提示“目前您還未做出決定是否使用該數字標識簽發這封郵件”如果您單擊檢視數字標識,會出現圖4.11所示的一張user1的證書,但是該證書沒有被信任,如果您再單擊開啟郵箱會出現如圖4.12所示的結果,郵件內容可以被檢視,但是在數字簽名的標記上有一個紅色的歎號,這意味著什麼?

001223452.png

針對提問1的分析和回答:

  使用者user2在沒有任何證書的情況下,是可以讀出被user1數字簽名的郵件內容的,因為數字簽名本身就不具備私密性保障,它是用於完整性保障和防篡改的目的而產生的,所以即便是user2沒有任何證書它也可以讀出user1數字簽名的電子郵件,因為數字簽名是郵件的傳送者user1使用它的私鑰來完成簽名的,私鑰在user1本地,只有擁有user1的公鑰都可以檢視被user1私鑰進行數字簽名的郵件內容,而user1的公鑰潛在是公開的,任何人都可以得到,這裡的任何當然也包括user2,證據?圖4.11不正是user1的證書,回憶專案三關於證書的理論,證書上有什麼?當然是user1的公鑰(決不會包含user1的私鑰),user2是如何得到user1的公鑰的?現在user1的公鑰沒被信任,這意味著什麼?很簡單,user1的公鑰潛在是可以被公開的,所以user1在傳送電子郵件時就可以把自己的公鑰給user2,這並不違反安全規則,只要私鑰是user1自己保管,所以user2可以得到user1的公鑰,只是現在user2並不能100%保證user1發給自己的郵件沒有被竄改,原因是給user1頒發公鑰的CA沒有被user2所信任,所以在user1的證書上出現了非信任機構頒發的提示,這就可能造成一個現象:證書頒發機構申明user1是良民,並頒發良民證,但是user2並不相信證書頒發機構的申明。要解決個問題,user2需要在核實證書頒發機構的身份後,下載證書頒發機構CA的證書鏈,如下圖4.13所示,user2去點選安裝此CA證書鏈,完成對證書頒發機構的信任,那麼由該CA發放或者認可的公鑰也將被user2所認可。

001310485.png

 當完成CA證書鏈的下載後,user1再發一封經過自己數字簽名的電子郵件給user2,此時一切都正常,如下圖4.14所示,郵件內容可讀取,而且數字簽名的標誌上再也沒有紅色的歎號了,如果點選數字簽名的標誌,會出現如圖4.15的對話方塊,在這個對話方塊中點選檢視證書,出現如圖4.16所示的對話方塊,點選簽署證書,可以得到圖4.17所示的user1的證書,事實上也就是user1的公鑰,而且現在該公鑰被信任,可以用該公鑰來解讀被user1私鑰簽名的電子郵件。

001407680.png

001407373.png

對上述實訓的結總:

User2有沒有任何證書的情況下,user1傳送經過自己私鑰簽名的電子郵件給user2,只要user2具備user1的公鑰,並且該公鑰是被user2信任的,那麼user2就可以閱讀該郵件,並保證該郵件沒有被篡改,而獲取user1的公鑰是一件非常容易的事情,公鑰對任何人都可以公開,可以通過傳送電子郵件時發給收件人。


引導性提問2:當完成上述步驟後,user2仍然沒有任何證書,現在使用者user2是否能使用user1的公鑰來完成加密傳送給user1的電子郵件?


針對提問2的分析和回答:


現在如圖4.17所示,user2在沒有任何證書的情況下加密傳送給user1的郵子郵件,這個行為是可以被執行的,即便user2沒有任何證書,因為user2加密傳送給user1的電子郵件,並不需要使用user2的任何公鑰或者私鑰,user2只會使用user1的公鑰來加密電子郵件併傳送給user1,然後user1使用自己的私鑰來解密電子郵件,而user1的公鑰潛在是可以公開的,任何人都可以獲得,然而在前面的實訓中user1使用自己的私鑰完成對電子郵件的數字簽字後,它將自己的公鑰和執行數字簽名的郵件一同傳送給user2,所以此時的user2具備usre1的公鑰,所以user2可以使用user1的公鑰(事實上就是user1的證書)來完成加密,並將郵件傳送給user1。只是再使用user1的公鑰執行加密後,會出現如下圖4.18所示的提示,郵件可以正常傳送,但是在“已傳送郵件”容器中你不能閱讀這封郵件,這是正常的提示,因為你能加密傳送給user1的郵件,是因為當前使用者user2具備user1的公鑰,這與當前使用者user2自己是否具備公鑰無關,而你無法閱讀在“已傳送郵件”容器中的郵件內容,那是因為當前使用者user2不具備user1的私鑰,所以你無法解密使用user1公鑰加密的郵件內容。

001517412.png


  現在來到另一臺計算機上,使用user1的郵件帳戶進入user1的郵箱,查收user2加密後傳送給自己的電子郵件,如下4.18所示,提示有一封加密的電子郵件,事實上當前郵箱使用者user1可以解密並讀出這封郵件如下4.19所示,因為user1具備一把與公鑰密加時所對應的私鑰,而且這把私鑰就在自己本地保管,它不可公開,只有當前使用者user1具備。

001619506.png

引導性提問3:現在user2仍然沒有證書,如果現在user1傳送加密的郵件給user2能成功嗎?


針對提問3的分析和回答:

此時,在user2沒有任何證書的情況下,user1加密傳送給user2的電子郵件會失敗,如圖4.20所示,user1輸寫了一封傳送給user2的電子郵件,並在工具中選擇了加密,但是會得到如圖4.21所示的提示:user2@jinpei.com的數字標識丟失(證書丟失)加密失敗,當然您可以選擇不要加密的形式來傳送電子郵件。

User1加密傳送給user2的電子郵件失敗的原因是:user2沒有任何證書(也就是沒有公鑰),user1就無法獲取user2的公鑰,因為使用非對稱式金鑰來完成加密,傳送方必須獲得接收方的公鑰才能完成加密,此是正是因為user1無法獲取user2的公鑰而導致的故障。要解決這個故障,使用者user2必須向網路中的證書伺服器申請一張證書,這樣user2才會具備合法的公鑰,才能被應用到加密的過程中。

001713923.png

第五步:現在user2向證書伺服器去申請一張用於電子郵件保護的證書,這一個過程與第三步user1申請證書的過程相同,只是相關的標識資訊不同,所以在這裡就不再重複描述,當user2完成證書申請後,應該在MMC的證書管控臺中看到如下圖4.22所示證書。

001803279.png

引導性提問4:現在使用者user2已經成功的獲得的證書,user1能夠使用user2的公鑰加密郵件併傳送給user2嗎?


針對提問4的分析和回答:

第六步:在user2已經具備證書的情況下,說明user2已經具備了公鑰,也就具備了讓user1使用user2的公鑰來加密郵件的前提條件,但是此時如果user1使用user2的公鑰直接加密,還是會失敗,為什麼呢?因為user2具備公鑰了,但是並沒有將自己的公鑰拿給user1,公鑰是潛在可公開的,但是要傳送方(user1)獲得接收方(user2)的公鑰後,才能執行加密。如何讓user1獲得user2的公鑰?兩個方案:一、user1可以通過網路將自己的公鑰傳送給user2,然後user2手動匯入user1的公鑰,因為公鑰本身就可公開所以通過網路傳送並不違反安全規則;二、user1使用數字簽名一封電子郵件併傳送給user2時,user1會隨同郵子郵件一起並自己的公鑰傳送給user2,此時user2可以獲得user1的公鑰。

  現在user2使用數字簽名傳送一封郵件給user1如圖4.23所示,當完成傳送後,在user1所處的計算機上登陸郵箱,可以看到一封由user2數字簽名的郵件,如圖4.24所示,事實上此時user1已經獲得了user2的公鑰。




001926899.png

001926511.png

  此時的user1就可以使用user2的公鑰來加密傳送給user2的郵件了,如下4.25所示,當完成傳送後,在user2的計算機上登陸郵箱,可以看到user1發給它的郵件如下4.26所示,並提示該郵件由發件人user1加密,user2可以使用自己的私鑰解密郵件,並讀取郵件的內容。user1使用誰的公鑰加密?當然是使用user2的公鑰加密,它是如何獲得得user2的公鑰的?它是通過接收user2發給user1的數字簽名的郵件來獲得user2的公鑰的。

002044291.png

002044729.png


當完成上述的所有配置後,你可以在郵箱中的聯絡人中找到user1user2,可以分別看到它們的數字標識如下4.274.28所示。

002155628.png

關於整個實訓任務的總結:郵件的傳送者和接收者如何來確認對方的公鑰?

回答:這將由軟體系統自動完成,比如:一個使用者1收到另一個使用者2使用數字簽名發來的電子郵件後,使用者1將自動獲取使用者2的公鑰。然後使用者1也就可以使用使用者2的公鑰來確保送給使用者2郵件內容的機密性,公鑰的交換依賴於複雜的數學演算法和金鑰交換協議。



本文轉自 kingsir827 51CTO部落格,原文連結:http://blog.51cto.com/7658423/1288840,如需轉載請自行聯絡原作者


相關文章