互聯網密文數據實現方式與私有CA功能實現

    友情提醒:文中實驗平臺爲vmware workstation10 + centos 6.6 x86_64,在實際環境中請謹慎使用文件提及的命令。

     內容概括:

     1.數據加密方式與使用場景

     2.openssl命令的簡單使用

     3.基於CentOS 6.6 X86_64平臺實現私有CA的功能


    嘮叨兩句:寫這篇博文的目的一是對學習知識的總結,二是IT從業入門朋友提供一個參考。因不是專業研究加密和解密的人員,文中涉及的方式,顯的很膚淺,若讀者爲這方面的大牛或骨灰人物,請移步吧,畢竟每天你只有24小時。


    一 數據加密的方式和使用場景

   數據在互聯網中安全傳輸要做到3點:數據內容機密性/數據內容完整性/通信雙方的身份驗證。

  1.1)數據內容的機密性

    所謂機密性,就是數據內容在傳輸過程中不能被第三方偷窺到。做到這點一般就是把明文的數據變爲密文傳輸。這種轉換方式通常用到對稱加密。

    對稱加密:數據發送方將明文數據和密鑰經加密算法特殊處理後,將其變爲密文發送出去。數據接收方接到數據後使用加密時相同的密鑰和加密算法的逆算法,將密文變爲明文。

        組成部分:算法和密鑰。

        特點:算法可能是公開的,安全性依賴密鑰。計算量小,加密速度快,效率高。

        不足之處:密鑰的管理。與不同的通信對象通信,都要有不同的密鑰,還要定期的更換。

        代表性算法:DES,3DES和AES。

        使用場景:加密數據。

  1.2)數據內容的完整性

     所謂完整性,就是數據內容在傳送過程中不能被篡改。實現這一點通常是提取數據的特徵碼,只要通信雙方使用相同算法對數據提取的特徵碼一致,就說明數據內容沒有被篡改。使用單向加密是實現。

    單向加密:

        代表性算法:md5,sha1,sha512,CRC-32等。

        特點:(1)定常輸出:不管源數據有多大和多小,在相同算法下計算出的結果長度都一致。

              (2)雪崩效用:輸入內容微小改變,會引起計算結果的巨大改變。

              (3)不可逆:不可通過特徵碼反向算出源數據。(MD5以被破解,可找度娘諮詢)

              (4)輸入一樣輸出必然一樣。

        使用場景:驗證數據內容的完整性。

  1.3)通信雙發的身份驗證

      所謂身份驗證,就是宣稱能驗證自己就是所宣稱的那個人。通常使用非對稱加密算法實現。

      非對稱加密:又稱公鑰加密。生成一個私鑰,從私鑰中提取出公鑰。私鑰加密的數據,公鑰可以解密;公鑰加密的數據,私鑰可以解密。私鑰各自保存,公鑰是公開的。

      A與B相互通信,A使用自己的私鑰加密數據,B使用A的公鑰解開被加密的數據,證明了A的身份。

而無法保證數據的機密性。

       A與B相互通信,A使用B的公鑰加密數據,B可用配對兒的私鑰解密數據,這保證了數據的機密性,但是無法證明A的身份。

        也就是說在非對稱加密中有的算法即可實現加密,又能實現數據的簽名。

       代表算法:RSA(實現:加密和簽名)

                 DSA(實現:簽名)

       特點:加密速度慢,很少用了加密數據內容,通常用來做簽名。

       使用場景:標明自己的身份。


   1.4) 現在以Tom和Jerry間傳遞文件/etc/fstab爲例,使用上面所述的三種方式實現數據的密文傳輸:

       TOM端:

(1)Tom爲要爲傳輸的文件/etc/fstab 使用單項加密算法提取特徵碼M1。

wKioL1U3Xs-x5MT5AABZfyt8Jmw166.jpg

(2)Tom使用自己的私鑰加密特徵碼M1而得到M2

wKiom1U3Xq2gHZqlAABTxl_BT0c269.jpg

(3)Tom將加密後的特徵碼M2與數據文件/etc/fstab使用臨時生成的密鑰C來進行二次加密得到數據D。


wKioL1U3YXCBNAjUAACeYrNgxac871.jpg

(4)Tom將臨時密鑰C使用Jerry的公鑰進行加密。


wKiom1U3YNry4g3iAABhiKkMMoY352.jpg

(5)Tom將被Jerry公鑰加密後的密鑰C與數據D一起發給Jerry。


wKiom1U3YmPg35gLAAEZM5TxVbU784.jpg



       Jerry端:

(6)Jerry使用將Tom發來的數據,進行分離,得到數據D與被加密的密鑰C。

wKiom1U3Yx-wtB-bAAD5QWrYbwU467.jpg

(7)Jerry使用自己的私鑰能解開被加密的密鑰C,證明了密鑰C沒有被篡改。

wKiom1U3Y6TSrg52AABn6CkjaKw307.jpg

(8)Jerry使用密鑰C能解開被加密的數據D,得到了特徵碼M2與文件/etc/fstab,證明可數據的機密性。

wKioL1U3ZYmhxkaEAACOyRtGi-M931.jpg

(9)Jerry使用TOM的公鑰解開被加密的特徵碼M2,得到特徵碼M1,這證明了Tom的身份。

wKiom1U3ZKGCjo68AABcLEukf78222.jpg

(10)Jerry使用相同的算法算出/etc/fstab的特徵碼與M1相同,這證明了/etc/fstab文件的完整性。

    上述流程看着很完美,其實是有缺陷的,就是Tom和Jerry怎樣安全的得到對方的公鑰?並且怎樣確認提供公鑰的就是Tom或者Jerry?

    要解決這個問題必須使用CA證書。通信雙方向第三方公信機構申請數字證書,證明自己的身份,當通信方A拿到通信方B的數字證書後,根據B數字證書中包含的信息,即可驗證B的身份。就像我們都使用公安機關發佈的居民***證明自己的身份一樣。當前前提是這個第三方公信機構必須被雙發所信任,若不被信任,那麼上面的問題就是一個無解的,還是買張車票親自去對方公司算了。

    CA這個簽證機構所頒發的數字證書中有什麼內容呢?

    數字證書現在一般流行使用X509 v3的版本。

    數字證書的格式(x.509 v3):
            版本號(version)
            序列號(serial number):CA用於惟一標識此證書;
            簽名算法標誌(Signature algorithm identifier)
            發行者的名稱:即CA自己的名稱;
            有效期:兩個日期,起始日期和終止日期;
            證書主體名稱:證書擁有者自己的名字
            證書主體公鑰信息:證書擁有者自己的公鑰;
            發行商的惟一標識:
            證書主體的惟一標識:
            擴展信息:
            簽名:CA對此證書的數字簽名;

     能在全互聯網通用的CA簽發的證書,申請是要花錢的,若是在自己公司內部使用的話,可自建私有CA來解決這個問題。


    二 Openssl命令

    在Centos 發行版Linux上提供一套名爲openssl的組件,能幫助我們構架私有CA。openssl組件包含下面的三部分: 

     libcrypto:加密、解密庫文件;
     libssl: ssl協議實現
     openssl:多用途命令行工具,每種功能都使用專用的子命令來實現 。

    openssl命令是這個組件中一部分,是實現私有CA的工具,在真實構建私有CA之前,必須學學openssl命令。

    openssl 提供三種命令:

        標準子命令:也是一級子命令,主要是openssl命令提供的各個功能。例如:對稱加密相關的enc,單向加密相關的dgst,生成用戶密碼的passwd,生成隨機數的rand等。

        消息摘要命令:這是二級子命令,主要用於指明單向加密時使用的算法,同標準子命令中的dgst連用。

        加密解密相關的命令:這是二級子命令,主要用於指明加密解密中使用的算法類型。同標準子命令中的enc連用。

        更詳細的請看$man openssl

 

1)顯示版本信息:使用命令openssl version

wKiom1U3dsfj8O33AACz_74LzcU371.jpg

2)加密測試:使用命令openssl enc加密:

wKiom1U3ehfTkXioAASc7hQ-W6g138.jpg

解析:$openssl enc -e -des3 -a -salt -in ./inittab -out ./inittab.jm1

      enc:表明使用openssl命令是用來加密解密的

      -e:表明是用來加密的

      -d:表明是用來解密的,不能同-e一起使用。

      -des3:表明加密的算法3DES

      -a:加密後的文件內容爲bash64格式

      -salt:自動給下面輸入的密鑰中加點料,防止被比對內容猜測密鑰

      -in /path/to/file:指明要被加密的文件在何處,叫什麼名字

      -out /path/to/file:指明文件加密後放置何處,叫什麼名字

      更多open enc的使用,請看$man enc

3)解密測試:也是使用openssl enc

wKioL1U3ffrCOTToAAP5H6s-pkw851.jpg

解析:-d:是解密的意思,其餘參數請看2)中解釋。


4)獲取文件特徵碼:使用命令openssl dgst

wKioL1U3f0jjIRX7AAP8ngzyPQ4804.jpg

解析:$openssl dgst -md5 /path/to/file

    dgst:指明openssl中取文件的特徵碼

    -md5:指明算法

    /path/to/file:指明文件對象。

    更對請參閱:$man dgst

5)生成RSA算法的私鑰:openssl genrsa:

wKioL1U3gbPwLukcAAiPbbtNVgs706.jpg

解析:$openssl genrsa -out ./cakey.pem 1024

     genrsa:指明使用rsa算法生成文件

     -out /path/to/file:指明生成的文件放置位置

     1024:指明稱爲私鑰的長度

    *若想同時修改生成 的文件的權限可這樣寫:

    $(umask 077;openssl genrsa -out ./cakey.pem 1024)

    更多信息請查看$man genrsa

6)從私鑰中提取公鑰:

wKiom1U3gsyjhVENAAQybFHplW8603.jpg   

    三.實現私有CA的功能

    下面的過程在2臺測試機上實現:

    IP:192.168.100.1  Hostname:caserver.lijun.com  角色:CA服務器

    IP:192.168.100.2  Hostname:Test02.lijun.com    角色:證書申請者

    3.1)建立私有CA(IP:192.168.100.1上實施)

步驟一:查看CA配置文件

在Centos上查看CA配置的文件/etc/pki/tls/openssl.cnf,比較重要的是下面這項:

------------------------------------------------------------------------

[ ca ]
 41
 42 dir             = /etc/pki/CA           # Where everything is kept            #設定CA的工作目錄

 43 certs           = $dir/certs            # Where the issued certs are kept  #指定CA已簽署過的的證書存取庫的存放位置

 44 crl_dir         = $dir/crl              # Where the issued crl are kept       #指定CA吊銷的證書的吊銷列表的存儲位置
 45 database        = $dir/index.txt        # database index file.                 #已簽署證書的索引信息

 48 new_certs_dir   = $dir/newcerts         # default place for new certs.    #新簽證書的位置
 50 certificate     = $dir/cacert.pem       # The CA certificate               #CA自己的證書位置

 51 serial          = $dir/serial           # The current serial number        #下一個被簽署的證書的序列號

 52 crlnumber       = $dir/crlnumber        # the current crl number     #已吊銷證書的編號

 54 crl             = $dir/crl.pem          # The current CRL                      #當前crl編號的證書

 55 private_key     = $dir/private/cakey.pem# The private key            #CA自己的私鑰文件
 73 default_days    = 365                   # how long to certify for          #CA簽署的證書的默認使用天數
 74 default_crl_days= 30                    # how long before next CRL     #被吊銷的證書展示時常

---------------------------------------------------------------------------

要確保在CA的工作目錄下:下列目錄和文件的存在:

certs crl index.htx newcerts serial crlnumber private

wKiom1U3oXuyg8CBAAKgDRlRsxQ205.jpg

步驟二:生成私鑰

wKiom1U3omXQW8xPAAKLKLmnH_A216.jpg


步驟三:生成自簽署證書

wKioL1U3pdvRMREMAAdKHqSDIDc431.jpg

wKioL1U3pgHSi1Q4AACZnNNoSrA407.jpg

    3.2)生成證書申請(IP:192.168.100.2上實施)

wKiom1U3p4zirkekAAksRrb7Vyc995.jpg


    3.3)CA爲申請者簽署證書(IP:192.168.100.1上實施)

wKiom1U3qAnwP4tYAAFBNIjbf8s584.jpg

wKiom1U3qXDiypgwAAVI_pMRySk306.jpg

 wKioL1U3q6SzQ8zaAAFIOtARZ9U600.jpg 

wKioL1U3rEXS0uOgAADpvg86eao412.jpg


    要注意2個問題:

        1.私鑰要加密保存

        2.可研究下openca的用法,它更適合大型企業私有CA的建設。







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章