1. 程式人生 > >linux安全和加密之SSL\TLS協議、CA、openssl的概述和使用

linux安全和加密之SSL\TLS協議、CA、openssl的概述和使用

http://blog.51cto.com/6638225/1855174

內容:

1、通訊加密型別及演算法

2、TLS/SSL協議的引入及其通訊過程

3、CA、數字簽名的引入

4、一個安全的資料通訊交換過程

5、openssl工具的使用

6、自制私有根CA過程

一、通訊加密型別及演算法

    資料加密通訊的重要性不言而喻,美國NIST,為了保證計算機的安全,提出了幾個要求:

    (1)、資料要有保密性:資料保密性和隱私性;確保資訊不被別人獲取,個人儲存的資訊不能被別人收集到;

    (2)、完整性:包括資料完整性和系統完整性;資料完整性確保資料和程式只能以特定許可權的進行授權和改變,只能授權之後才能改變或者被改變;確保系統以一種正常的方式執行預定的功能,不會因別人的介入改變方向;

    (3)、可用性,工作迅速,可正常使用的情況並獲取到資訊;

    因此,相應的加密型別及演算法可以分為以下幾種:

    1、對稱加密

對稱加密:採用單鑰密碼系統的加密方法,同一個金鑰可以同時用作資訊的加密和解密,這種加密方法稱為對稱加密,也稱為單金鑰加密。需要對加密和解密使用相同金鑰的加密演算法。由於其速度快,對稱性加密通常在訊息傳送方需要加密大量資料時使用。對稱性加密也稱為金鑰加密。

特性:

        (1)、加密、解密使用同一個金鑰,效率高

        (2)、將原始資料分割成固定大小的塊,逐個進行加密

缺陷:

        (1)、金鑰過多

        (2)、金鑰分發

        (3)、資料來源無法確認

相關的加密演算法:

    DES:Data Encryption Standard,56bits

3DES:

     AES:Advanced Encryption Standard (128, 192, 256bits)

    Blowfish,Twofish

    IDEA,RC6,CAST5

    因為對稱式的加密方法如果是在網路上傳輸加密檔案就很難把金鑰告訴對方,不管用什麼方法都有可能被別竊聽到。且通訊方如果比較多,祕鑰過多,不便於管理,金鑰傳輸和交換難以實現;因此產生了非對稱加密

    2、非對稱加密

    非對稱式加密就是加密和解密所使用的不是同一個金鑰,通常有兩個金鑰,稱為"公鑰(public key)"和"私鑰(secret key)",它們兩個必需配對使用,否則不能開啟加密檔案。這裡的"公鑰"是指可以對外公佈的,"私鑰"則不能,只能由持有人一個人知道。"公鑰"是可以公開的,也就不怕別人知道,收件人解密時只要用自己的私鑰即可以,這樣就很好地避免了金鑰的傳輸安全性問題。

公鑰一般是在私鑰中擷取片斷而成

功能:

    數字簽名:主要在於讓接收方確認傳送方身份

    對稱金鑰交換:傳送方用對方的公鑰加密一個對稱金鑰後傳送給對方

    資料加密:適合加密較小資料

    缺點:金鑰長,加密解密效率低下,因此非對稱加密一般不用於加密資料

    演算法:

    RSA(加密,數字簽名),DSA(數字簽名),ELGamal

    現實生產中,RSA演算法用的最多

    3、單向加密(單向雜湊)

    單向加密指的是通過相關演算法將任意資料縮小成固定大小的“指紋”,其作用是用於驗證資料的完整性,單向加密有以下特點:

        任意長度輸入

        固定長度輸出

    若修改資料,指紋也會改變(“不會產生衝突”)

            無法從指紋中重新生成資料(“單向”)

    因此,單向加密主要用於驗證資料的完整性

    相關的加密演算法:

        md5、sha1、sha224、sha256、sha384、sha512

二、TLS/SSL協議的引入及其通訊過程

為何會產生TLS/SSL?

        因為在以前的通訊協議設計中,很多應用層的協議並沒有對資料進行加密的功能,如http、ftp、telnet、pop3、smtp等,這樣很大程度被有心之人加以利用,因此Netscape於1994年開發了SSL,後來成為了世界上最著名的web安全機制,所有主要的瀏覽器都支援SSL協議

        SSL(Secure Sockets Layer 安全套接層),及其繼任者傳輸層安全(Transport Layer Security,TLS)是為網路通訊提供安全及資料完整性的一種安全協議。TLS與SSL在傳輸層對網路連線進行加密。

SSL的通訊原理及過程:

        SSL介於應用層和TCP層之間,但並不是獨立的一層,應用層資料不再直接傳遞給傳輸層,而是傳遞給SSL層,SSL層對從應用層收到的資料進行加密,並增加自己的SSL頭。

wKiom1fifiWhhdn2AAFUWRPsKyo465.png

在建立SSL連線的時候主要需要以下幾個步驟: 

    (1) 確認在資料傳輸過程中的加密手段。 

    (2) 建立並共享在客戶端和伺服器端的密匙。 

    (3) 驗證伺服器(可選)。 

    (4) 驗證客戶端(可選)。  

    其中第一步加密手段確認,允許客戶端和伺服器端選擇一種雙方都支援的加密包,SSL3.0協議定義了31種加密包。一個加密包由以下幾個部分組成: 

    (1) 密匙交換方法,如RSA密匙交換,Diffie-Hellman密匙交換等。  

    (2) 資料傳送的加密手段,如流加密,RC4 with 40-bit keys,RC4 with 128-bit keys,CBC Block Ciphers,RC2 with 40 bit keys,DES40, DES, 3DES_EDE,Idea和Fortezza 等。 

    (3) 建立郵件認證碼(Message Authentication Code ,MAC)的郵件文摘,可以使用MD5(128位雜湊),Secure Hash Algorithm (SHA)等。

三、 數字簽名、證書、CA等相關解析說明

    1、數字簽名:是指可以新增到檔案的電子安全標記。使用它可以驗證檔案的傳送者以及幫助驗證檔案自被數字簽名後是否發生更改。 如果檔案沒有有效的數字簽名,則無法確保該檔案確實來自它所聲稱的源,或者無法確保它在釋出後未被篡改(可能被病毒篡改),較為安全的做法是,不要開啟該檔案。 

數字簽名的獲取和使用:  

    (1).對要傳送的內容使用hash函式生內容的摘要(digest) 

    (2).使用自己的私鑰對摘要加密,就獲得了自己的數字簽名. 

    (3).將數字簽名放到要傳送的內容裡面,一同傳送.  

    (4).對方收到內容後,先用傳送者的公鑰對內容裡的數字簽名解密,得到內容的摘要,是否解密成功就能證明發送人的身份.  

    (5).然後對內容使用hash函式生成內容的摘要. 6.如果兩個摘要一致,就證明內容沒被修改過.  

    2、數字證書(digital certificates):作用是防止公鑰被篡改,也可以新增到檔案,通俗地說,證書就類似顯示生活的身份證,它是用來證明某個人是某個人的東西。一份數字證書包括了公鑰、個人、伺服器或者其它機構的身份資訊. 

    數字簽名的獲取和使用:  

        (1).把 傳送者的個人資訊,傳送者的公鑰,數字證書的相關資訊(比如:有效日期) 使用CA(證書中心)的私鑰加密,再加上CA中心對該數字證書裡面的資訊的數字簽名,得到的就是傳送者的數字證書.(以上步驟是在CA的伺服器上運算的) 

        (2).將數字簽名和數字證書都放到要傳送的內容裡面,一同傳送.  

        (3).對方接收到內容後,先用CA的公鑰解開數字證書,就可以拿到傳送者真實的公鑰了,然後就能證明發送者的身份和接收內容是否被修改過了。  以IE瀏覽器為例,單擊 工具/Internet 選項/內容/證書 就能看到"受信任的根證書頒發機構"列表,瀏覽器會根據這張表,檢視解開數字證書的(CA的)公鑰是否在列表之內。 

    3、證書中心(certificate authority,簡稱CA):也叫 認證中心,它是專門提供網路身份認證服務,負責簽發和管理數字證書,具有權威性和公正性的第三方信任機構,它的作用就像我們現實生活中頒發證件的公司,如護照辦理機構。目前國內的CA認證中心主要分為區域性CA認證中心和行業性CA認證中心。 

    4、根證書(root certificates):根證書,是CA認證中心給自己頒發的證書,是信任鏈的起始點。安裝根證書意味著對這個CA認證中心的信任。

    從技術上講,數字證書包含四部分,使用者的資訊,使用者的公鑰,數字證書的資訊,還有CA中心對該數字證書裡面的資訊的數字簽名,要驗證一份數字證書的真偽(即驗證CA中心對該數字證書資訊的數字簽名是否有效),需要用CA中心的公鑰驗證,而CA中心的公鑰存在於對這份數字證書進行簽名的數字證書1內,故需要下載數字證書1,使用數字證書1對數字證書驗證又需先驗證數字證書1本身的真偽,故又要用簽發數字證書1的數字證書2來驗證,這樣一來就構成一條數字證書驗證鏈,這條數字證書驗證鏈在哪裡終結呢?答案就是根證書,根證書是一份特殊的數字證書,它的簽發者是它本身,下載根證書就表明您對該根證書以下所簽發的數字證書都表示信任,數字證書的驗證追溯至根證書即為結束。

    所以說使用者在使用數字證書之前必須先下載根證書。,下圖是windows的證書相關截圖資訊

wKioL1fifmuiTaZ3AADJM1Hd4As757.png

四、一次安全加密的通訊過程(源自網路)

wKiom1figN7wIDlJAARGHQt01D0045.png

1 2 3 4 5 6 7 8 9 10 11 根據上圖來說一下一次會話,發郵件,使用者和使用者之間的資料加密的全過程: 1、Bob生成資料 2、用單向加密資料生成特徵碼 3、Bob用自己的私鑰加密特徵碼放在資料後面———-用自己的私鑰進行簽名; 4、生成臨時會話金鑰加密特徵碼和資料——-因為之前沒有對資料進行加密; 5、用對方Alice的公鑰加密臨時金鑰(這裡的公鑰其實就是證書,證書包括了Alice的公鑰已經CA的資訊) 6、資料加密完後一併發給對方 7、Alice用自己的私鑰解密對稱金鑰 8、拿到密碼後解密對方加密的資料 9、Alice用Bob的公鑰解密特徵碼—————–使用傳送者的公鑰對簽名進行認證; 10、Alice用相同的單向加密驗證資料的完整性

五、openssl的介紹和使用

    openssl:開源的ssl實現工具,它由三個元件組成

    三個元件:

        openssl: 多用途的命令列工具

        libcrypto: 加密演算法庫

        libssl:加密模組應用庫,實現了ssl及tls

    相關命令:openssl enc、openssl dgst、openssl genrsa、openssl rsa 

    另外,還有一系列的指令,如: 

        enc:通用加密程式,可以使用不同的加密組合完成加密,輸入及輸出可以通過Base64編碼轉換。 

        dgst:通用郵件文摘,使用f md2, md5, sha (sha-0 or sha-1)或者mdc2等演算法。 

        rsa:操縱RSA 私鑰。 

        dsa:操縱DSA 私鑰。 

        dh:操縱Diffie-Hellman引數檔案。 

        crt2pkcs7:產生包括了一個crl和證書的pkcs7物件。 

        x509:操縱x509證書, “自籤”證書。