詳解SSL/TLS

SSL/TLS分析html

 本文分爲六個部分,詳見思惟導圖。linux

wKioL1k39YvSzh5kAABPHqlBJSw935.png

1、SSL/TLS做用git

 在瞭解做用前,先介紹什麼是SSL/TLS?SSL(Secure Sockets Layer)即安全套接字層,保障internet數據傳輸的安全性。TLS(Transport Layer Security)即安全傳輸層協議,保障應用程序之間通訊的安全性。算法

 要了解SSL/TLS的做用要從網絡通訊風險着手,因此總結出了三大風險及其對應的解決方案。數據庫

 參考連接:(http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html) 安全

wKioL1k3-ITggCavAABimHljhEw978.png

2、歷史服務器

    wKioL1k3-TKBeO17AABmazUK9pk755.png

3、必須掌握的一些密碼學的概念網絡

wKioL1k3-cbzWjPOAABMxNDshns066.png

  下面是密碼學中的概念介紹。併發

wKiom1k3-kPDC0psAADUdMwTSL4347.png

4、SSL/TLS基本運做過程
dom

wKioL1k3-0qjlQo1AAA8FmLh2Nk787.png

5、握手階段的詳細過程

  客戶端服務端安全加密通訊有四次握手的過程,握手過程出如今上面運做流程的前兩個階段。握手過程是這樣的。

wKiom1k3_BXgfzp5AAA_RJOyxC4053.png

 第一次握手也稱爲ClientHello,即客戶端像服務端問好。這可不是簡單的問好,此次問好包含了大量的信息。信息以下:

    wKioL1k3_K_TzZtjAAA97gyak0c562.png   

 第二次握手也稱爲serhello,即服務端向客戶端問好。一樣,這也不是簡單的問好,也包含的大量的信息。信息以下:

   wKioL1k3_c3B95QmAAA64HaJXL4769.png 

 第三次握手爲客戶端迴應。信息以下:

wKiom1k3_k-wXkWlAABMzeTJseU368.png

 第四次握手爲服務端最後的迴應,信息以下:

wKiom1k3_qTxWdm4AAA2fXHRQOA461.png

6、OpenSSL

 OpenSSL是SSL的開源實現方案。我將介紹以下的內容。

wKiom1k3_5ShwzR8AAAgWmDROZs365.png

 6.1 簡介

  OpenSSL是一個開放源代碼的軟件庫包,應用程序可使用這個包來進行安全通訊,避免竊聽,同時確認另外一端鏈接者的身份。

 6.2 組件

  OpenSSL由如下三部分組成。libcryto這是一個具備通用功能的加密庫;libssl是實現SSL機制的安全通訊加密庫,實現TLS/SSL功能。經過libssl能夠實現遠程執行程序命令,傳輸文件等等。XSHELL,SecureCRTP,putty工具就是調用了這個庫實現遠程控制主機的功能;openssl是個多功能命令行工具、他能夠實現加密解密、甚至還能夠 當CA來用、可讓你建立證書、吊銷證書。

wKiom1k4AXTSt9Y_AAATT93CMm0981.png

 6.3 加密算法和協議

  在這一小節,我瞭解如下四部分的信息。

wKiom1k4BJ2SG24SAAAsp2wpt20328.png

 6.3.1 單向加密

  單向加密算法的介紹以及特性如圖所示。MD5加密算法即爲有名的數字摘要算法。簡單理解MD5算法簡單的來講就是把任意長度的字串變換成固定長度(一般是128位)的16進制串。

  MD5的功能有:(1)一致性驗證(2)數字簽名(3)密碼存儲

  (1)一致性驗證,簡單理解就是檢驗是否一致,好比說,你從網上下載一個文件,網站會給出這個文件的MD5值,經過這個MD5值來比對下載前源文件與下載後的文件是否一致。

  (2)數字簽名,簡單理解就是經過MD5算法實現的簽名,做用是驗證身份。

   參考連接:http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html

  (3)密碼存儲,很好理解,就是將密碼經過MD5算法加密存儲。

  SHA1加密算法會產生一個160位的消息摘要,因爲SHA1算法的雪崩效應(改變一位消息數據會使輸出值大幅度變更)與不可逆性,可用於驗證數據完整性與消息驗證。因爲對安全加密的要求性更高,後來又出現了更爲複雜的SHA224,256,384,512算法,其主要區別就是加密位數和安全性更高。

wKiom1k4BS_AToDBAABDdY_7BSA235.png

 6.3.2 對稱加密

  我將介紹對稱加密下面三個部分。主要介紹下實現對稱加密的命令 openssl enc。

  openssl enc命令的使用能夠參考這裏:http://man.linuxde.net/openssl

  在linux系統環境下你也可使用man openssl查看openssl用法,其次你能夠經過openssl enc help查看命令選項以及參數。    

wKiom1k4CTCi4tU4AAAV3JZ1pCg873.png

wKioL1k4CmKBDmN6AABHSJyCm4M744.png

  對稱加密命令openssl的實踐應用(CentOS7.3實驗環境)

  說明:示例爲加密/etc/fstable文件以及解密對應的文件

  第一步:對/etc/fstab文件進行加密

    說明:將/etc/fstab文件加密爲fstab.ciphertxt文件

wKioL1k4D7GAi18uAAAQmzgjm1I898.png

  第二步:對fstab.ciphertxt文件解密

    說明:將fstab.ciphertxt文件解密爲當前目錄的fstab文件

wKioL1k4ELnAnuBMAAAK3bPKh98538.png

 第三步:測試加密文件

    說明:用cat命令查看fstab.ciphertxt加密文件,出現亂碼;而查看解密的fstab文件則顯示正確信息,由此證實加密以及解密成功。

wKioL1k4EY2wLOETAAA3jn182Qk961.pngwKiom1k4EZzSozDnAABKORr7WTU987.png

 6.3.3 公鑰加密

wKioL1k4E1yxAYGiAAAhrIu6okE693.png

  公鑰加密特性及用途如圖所示:

wKioL1k4E_rSoOTLAABp4w9VO9Y660.png

 有關RSA算法的介紹請戳這裏:

    http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html

 下面重點介紹RSA密鑰的生成方法

  openssl genrsa的用法能夠參考:http://man.linuxde.net/openssl

  在linux環境下你也可使用man openssl,其次你能夠經過openssl genrsa help查看命令選項以及參數。

  私鑰公鑰生成的一次實踐

    第一步:在linux環境CA中心生成私鑰    

    (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey_new.pem 4096)

wKioL1k4Ghygt4-rAAAVsgw97Hg730.png

    第二步:提取公鑰

wKioL1k4GtKy3-nzAABxmUOG-rw879.png

 6.3.4 公鑰基礎設施(pki)

  PKI(Public Key Infrastructure)翻譯過來就是公鑰基礎設施,簡單理解就是利用公鑰技術對應用加密解密的基礎設施。它是一個提供安全服務的基礎設施,是CA的配置服務設置,同時也是電子商務的關鍵和基礎技術。

  RA(Registration Authority)翻譯過來就是註冊受權中心。RA是證書註冊審批系統,該系統具備證書的申請、審批、下載、OCSP、LDAP等一系列功能,爲整個機構體系提供安全認證服務。

 CRL(Certificate Revocation List )證書吊銷列表。當你的證書過時了,就被吊銷。這是一個由 CA 維護併發布的列出已被吊銷的證書的文檔。爲確保其完整性,CRL 是用 CA 的私鑰簽署的。

 證書存取庫,即存取證書的一個庫。

 X.509v3,定義了證書的結構以及認證協議標準。包括但不只限於如下內容:

    版本號

    序列號

    簽名算法ID

    發行者名稱

    有效期限

    主體名稱

    主體公鑰

    發行者的唯一標識

    主體的唯一標識

    擴展

    發行者的簽名

6.4 OpenSSL命令

wKioL1k45ELhgHivAABFqtvLH5o174.png

 接下來詳細介紹openssl命令,重點放在命令的實踐上。

 6.4.1 類型

 openssl命令按照我本身的理解分爲了三種命令類型:標準命令,消息摘要命令以及加密命令。

 標準命令有:enc, ca, req, genrsa等等。命令的介紹你能夠在linux系統中經過man openssl檢索關鍵字獲取。 

     enc負責密碼編碼與加密

    ca負責證書認證管理。

    req負責證書請求文件的管理。

    genrsa負責生成RSA的私鑰。

 下面咱們來看openssl命令的用法。

 6.4.2 用法

 openssl命令的應用之一是生成用戶密碼。應用工具或者你能夠稱爲命令有:

    passwd, openssl passwd

    paswwd是普通的加密方式,但實際上也足夠安全了。

    openssl passwd採用哈希算法進行加密。

 生成隨機數採用的工具是openssl rand,你能夠經過man sslrand採用命令的用法。

  兩個例子

    openssl  rand  -hex  NUM 

     -hex表示每一個字符爲十六進制,至關於4位二進制,NUM表示隨機數的字節數,出現的字符數爲NUM的兩倍。

    wKioL1k46xjw7SQ3AAANLl7wop4521.png

    openssl  rand  -base  NUM

    -base表示每一個字符爲64爲64機制的字符,NUM表示隨機數的字節數,出現的字符數一樣爲爲NUM的兩倍。

wKiom1k47CSBD_ktAAAK8hNRcXw888.png

    linux系統上有隨機數的生成器設備

        /dev/random設備:僅從熵池返回隨機數;隨機數用盡,阻塞;

        /dev/urandom設備:從熵池返回隨機數;隨機數用盡,會利用軟件生成僞隨機數,非阻塞,產生的僞隨機數不安全。

     那熵池的隨機數的來源從何而來,主要從這兩方面而來:        

        硬盤IO中斷時間間隔;

        鍵盤IO中斷時間間隔;

 6.4.2.4 CA介紹

    wKiom1k48o7xKCa5AAAayFZmiuM495.png

  CA內容介紹分爲以上四個部分。

  CA(Certificate Authority)即數字證書認證機構,CA的類型有公有CA和私有CA。公有CA即公有數字證書認證機構,特色是權威安全。私有CA即私有的數字證書認證機構,私人擁有的,通常來講,安全性就有待考量了。下面咱們來創建一個私有CA來玩玩。

wKiom1k489miqvlZAAAbk8yl6mU011.png

 CA的配置文件是/etc/pki/tls/openssl.cnf,你能夠編輯配置文件對私有CA配置作出相應地修改。

 建立私有CA的思路是這樣的:在CA主機上生成一個私鑰以及一個自簽證書,併爲CA提供所須要的目錄及文件。

 接下來介紹創建私有CA的步驟 

    1.建立所須要的文件以及目錄        

         touch /etc/pki/CA/{serial,index.txt} 生成證書索引數據庫文件

        echo 01 > /etc/pki/CA/serial 指定第一個頒發證書的序列號

        mkdir  -pv  /etc/pki/CA/{certs,crl,newcerts} 

         建立證書,證書吊銷,新證書目錄

    2.生成一個基於RSA算法的私鑰

        cd /etc/pki/CA/

        (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)

    3. 生成自簽名的證書         

        openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out             /etc/pki/CA/cacert.pem -days 3655

    參數說明

        req:負責證書請求文件的管理        

        -new: 生成新證書籤署請求

        -x509: 專用於CA生成自簽證書

        -key: 生成請求時用到的私鑰文件

        -days n:證書的有效期限

        -out /PATH/TO/SOMECERTFILE: 證書的保存路徑

 建立CA的實踐(詳細請參照上面步驟)

    touch /etc/pki/CA/{serial,index.txt}

    echo 01 > /etc/pki/CA/serial

    mkdir  -pv  /etc/pki/CA/{certs,crl,newcerts}    

    cd /etc/pki/CA/

     (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)

    成功建立RSA私鑰

    wKiom1k4-o2hRfysAAAS8ZTSmNg580.png

    openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out            /etc/pki/CA/cacert.pem -days 3655

wKiom1k4_NyTBqL4AABMs6plI8k563.png

    分別輸入你的國家,省份,城市,公司,部分,服務器地域名以及郵箱地址。這樣一個私有的CA就建立成功了。私有CA證書路徑爲/etc/pki/CA/cacert.pem,若是其餘服務器想認證這個證書只要取得這個證書文件便可。

 接下來在上面實驗的基礎上再介紹一個簽署證書的示例

wKiom1k4_wbCibDMAAA_i1VzmOM130.png

 簽署證書的思路如上圖所示,咱們只須要按照步驟來實踐便可。

    注:(本示例主要以httpd服務爲例,由於模擬創建一個基於https的站點要用到)

    (1)主機A生成私鑰        

     mkdir  /etc/httpd/ssl  #建立存儲私鑰的目錄

     cd  /etc/pki/CA     #注意:只有再CA目錄中才能生成私鑰

    (umask  077; openssl  genrsa -out  /etc/httpd/ssl/httpd.key  2048)

    wKioL1k5Aq3CVzNwAAAVJazB3zw476.png

    (2) A主機生成證書籤署請求

       openssl  req  -new  -key  /etc/httpd/ssl/httpd.key  -out                  /etc/httpd/ssl/httpd.csr  -days  365

wKiom1k5A23wbbbzAABZwvENRwo162.png

    填上相應的信息,注意國家,省份,城市,公司,部門信息應該保持一致,才能合理地簽署請求。

    (3) 將請求發送給CA主機B

      mkdir /CA_csr        #建立存儲CA簽署請求的目錄

      scp /etc/httpd/ssl/httpd.csr   CA主機IP:/CA_csr

    (4) 在CA主機B上籤署證書

      openssl ca  -in  /CA_csr/httpd.csr  -out  /etc/pki/CA/certs/httpd.crt  -days  365

wKioL1k5BKixOTVKAABmYXsCMpY492.png

    統統選擇y,表示選擇贊成簽署證書。

    (5)將簽署的證書發送給須要受權的主機   

      scp /etc/pki/CA/certs/httpd.crt 目標主機ip:/etc/httpd/ssl/

wKioL1k5BYjj2tqEAAAknJ0yCcE108.png

    成功將簽署的證書傳送給主機A。                

    (6)查看證書中的信息(CA主機B中)

     openssl  x509  -in /etc/pki/CA/certs/httpd.crt  -noout  -serial  -subject

wKioL1k5BkCCtykFAAAWMHtB8yI674.png

 吊銷證書步驟

    A 在客戶端獲取要吊銷的證書的serial               

        opensslx509 -in /PATH/FROM/CERT_FILE-noout -serial -subject    

    B 在CA上,根據客戶提交的serial與subject信息,對比檢驗是否與index.txt文件中的信息一致,吊銷證書:

        opensslca -revoke /etc/pki/CA/newcerts/SERIAL.pem    

    C 指定第一個吊銷證書的編號

        注意:第一次更新證書吊銷列表前,才須要執行

        echo 01 > /etc/pki/CA/crlnumber   

    D 更新證書吊銷列表

        opensslca -gencrl-out /etc/pki/CA/crl/crl.pem

        查看crl文件:

        opensslcrl-in /etc/pki/CA/crl/crl.pem-noout-text

相關文章
相關標籤/搜索