天天看點

我的學習筆記1:加密、解密,以及OpenSSL建立私有CA

1.OpenSSL—就是在SSL協定Linux主機上實作的一個軟體,進而完成SSL的應用

2.NCIST 資料安全性法則:

(1)保密性。包括:資料保密性、隐私性

(2)完整性。包括:資料完整性、系統完整性

(3)可用性

3.加密算法

1.對稱加密

特性:

(1)加密和解密使用同一個密鑰。主要用于資料加密。

(2)将明文分割成固定大小的塊,逐個進行加密。而非加密整個檔案

依賴于:算法和密鑰。安全性依賴于密鑰,而非算法。
    常見對稱加密算法:
        DES:Data Encryption Standard,使用56bits的密鑰
        3DES:就是對DES執行3輪
        AES:Advanced Encryption Standard,采用(128bits,192bits,256bits)變化的密鑰長度。(最常用的)
        Blowfish
        Twofish
        IDEA
        RC6
        CAST5

    缺陷:
        1.密鑰過多(當與更多的主機進行密鑰通信時,針對不同的主機就會采用不同的密鑰)
        2.密鑰分發


2.非對稱加密,即公鑰加密(其密鑰是成對兒出現)
    密鑰對兒:私鑰和公鑰
        私鑰:僅允許個人使用,secret key
        公鑰:公開給所有人使用,public key。(公鑰從私鑰中提取而來,建立時隻需建立私鑰即可,另外使用公鑰加密的資料,隻能使用此公鑰配對兒的私鑰解密;反之亦然)

    特性:
        1.密鑰長度較大,例如:512bits,2048bits
        2.加密、解密分别使用密鑰對兒中的密鑰相對進行
        3.常用于數字簽名和密鑰交換


    用處:
        1.身份認證:私鑰擁有者用自己的私鑰加密的資料,隻要用其公鑰能解密,即可認證其身份。
        2.密鑰交換:與被通信方通信之前,首先擷取到對方的公鑰,自己生成一個加密密碼,用對方的公鑰加密,并發送給對方。
            不能用來加密資料的原因:
                公鑰加密算法長度太長,而資料一般很大,是以加密效率極低,僅用于加密密碼
    常用的公鑰加密的算法:
        RSA:密鑰認證、資料交換都可應用(最常用)
        DSA:僅用于密鑰認證
        ELGamal:


3.單項加密(指資料能加密但不能解密):主要用于提取資料的特征碼
    特性:
        1.定長輸出:無論原來的資料是多大級别,其加密結果長度一樣
        2.有雪崩效應:原始資料的微小改變将會導緻結果的巨大變化
        3.不可逆:

    算法:
        MD5:采用128bits的定長輸出
        SHA1:采用160bits的定長輸出,一共有2^160種
        SHA256
        SHA384
        SHA512

        CRC32:循環備援校驗碼

    在/etc/shadow檔案中就使用的單項加密算法:
    ![這裡寫圖檔描述](https://img-blog.csdn.net/20150813215409395)

    用處:
        1.資料完整性


    數字簽名:就是通信方用自己的私鑰加密提取的特征碼,就稱為數字簽名

    密鑰交換:




5.一次加密通信的全過程
    發送者:
        1.使用單項加密算法提取出資料的特征碼
        2.用自己的私鑰加密特征碼并附加在資料的後面
        3.生成用于對稱加密的臨時密鑰
        4.用生成的臨時密鑰加密資料和已加密的特征碼
        5.使用接收方的公鑰加密臨時密鑰,并附加在對稱加密的後方
    接收者:
        1.使用自己的私鑰解密臨時密鑰,進而獲得對稱密鑰
        2.使用對稱密鑰解密對稱加密的資料和私鑰加密的特征碼密文
        3.使用發送方的公鑰解密特征碼密文,進而獲得對方計算生成的特征碼和資料
        4.使用與對方同樣的單向加密算法計算資料的特征碼,并與解密而來的進行比較

6.數字證書
    CA:證書頒發機構,對通信雙方的公鑰進行簽名、認證。
        功用:保證公鑰資訊安全分發

    數字證書的格式(x.509):
        版本号(version)
        序列号(serial number)
        簽名算法标志
        發行者的名稱:CA自己的名稱
        有效期:兩個日志:起始日期和終止日期
        證書主體名稱:證書擁有者的名字
        證書主體公鑰資訊:證書擁有者自己的公鑰
        發行商的唯一辨別:
        證書主體的唯一辨別
        擴充資訊:
        簽名:CA對此證書的數字簽名

    證書通常有2類用途:
        使用者證書:某個使用者單獨使用
        主機證書:(直接放在某主機上,被某個主機程序使用,如httpd程序)

    撤銷證書:

7.PKI:Public Key Infrastructure,公鑰基礎設施
    組成部分:
        簽證機構:CA
        注冊機構:RA
        證書吊銷清單:CRL
        證書存取庫:

8.NetScape---網景公司,研發浏覽器以及web浏覽器,以及SSL也是其研發的。
    SSL協定,現在的版本:sslv1,sslv2,sslv3
    TLS協定:transport layer security,現在版本:tlsv1,

    http基于ssl協定後就變成了https,https監聽在443端口上

9.openssl的組成部分:
    libcrypto:加密、解密庫檔案
    libssl:ssl協定的實作
    openssl:多用途的指令行工具,每種功能都使用專用的子指令來實作
linux中另一個加密解密的工具---gpg:全稱GNU Privarcy Guard,是pgp規範的實作

10.openssl:
    子指令分類:
        标準指令
        消息摘要指令
        加密、解密相關的指令

        1.加密檔案(使用對稱加密),
            工具:openssl enc,gpg
            算法:des,3des,aes,blowfish,twofish,idea,cast5

            enc工具簡單用法:
            #openssl enc -e CIPHERNAME -a -salt -in /PATH/FROM/SOMEFILE -out /PATH/FROM/SOMECIPHERFILE

            #openssl enc -d CIPHERNAME -a -salt -in /PATH/FROM/SOMECIPHERFILE -out /PATH/FROM/SOMEFILE


            1.加密fstab檔案
            #openssl enc -e -des3 -a -salt -in fstab -out fstab.des3
                -e :表示加密,encryption
                -des3:表示使用的加密算法為des3
                -a :表示使用ASCII格式輸出文本内容
                -salt:表示加密使用雜質
                -in fstab:表示要加密的檔案為fstab
                -out fstab.des3:表示加密後的檔案的名字叫fstab.des3
            #cat fstab.des3
            2.解密檔案
            #openssl enc -d -des3 -a -salt -in fstab.des3 -out fstab.new
                -d:表示解密
            #cat fstab.new

        2.單向加密:(提取特征碼)
            算法:md5,sha1
            工具:openssl dgst,md5sum

            簡單用法:
            #openssl dgst -CIPHER /PATH/TO/SOMEFILE…..

            1.産生fstab.new檔案的特征碼
                #openssl dgst -md5 fstab.new
                    -md5:使用md5碼來計算檔案fstab.new特征碼,并顯示在螢幕上
                #md5sum fstab.new

                上述兩者産生的md5碼是一樣的,

            2.MAC:消息認證碼,單向加密的一種延伸 應用,用于實作在網絡通信中保證所傳輸的資料的完整性
            常用的MAC機制:
                CBC-MAC
                HMAC:使用md5或sha1算法

        3.生成使用者密碼:

            簡單用法:
                #openssl passwd -1 -salt 8bits随機數
                一般8bits随機數 随機生成
            執行個體:
            #openssl passwd -1 -salt 12345678
            輸入密碼即可
                -1:表示使用MD5碼加密
                -salt 12345678:表示加入雜質,防止密碼一樣而後生成的md5碼一樣

        4.生成随機數
        #openssl rand [-hex|-base64] NUM
            1.#openssl rand -hex 4
                4:表示4個字元,每個字元用2位二進制來表示
            生成的随機數是0-9,a-f等16進制的随機數組成

            2.#openssl rand -base64 4
            生成的随機數a-z,1-9,A-Z等任何文本字元組成

        5.整合生成随機數和使用者密碼
        1.
        #openssl passwd -1 -salt $(openssl rand -hex 4)


        6.生成密鑰對兒(即生成私鑰,從私鑰中提取出公鑰)

            簡單用法1(生成密鑰):genrsa
            #openssl genrsa -out /PATH/TO/PRIVATE_KEYFILE NUMBITS
                gensa:生成密鑰的
                -out /PATH/TO/PRIVATE_KEYFILE :指明生成密鑰檔案
                NUMBITS:指明密鑰長度

            1.
            #openssl genrsa -out test.key 2048
                  #cat test.key
            #chmod 400 test.key
            【生成私鑰後,一定要更改私鑰的權限,僅root使用者可讀,其他使用者、組都無權限】

            2.
            #(umask 077;openssl genrsa -out /PATH/TO/PRIVATE_KEYFILE NUMBITS
            )
            #ll /PATH/TO/PRIVATE_KEYFILE

            生成的test.key檔案的權限自動就是600
            注意:在bash指令行放在小括号執行的指令,其實是通過打開一個子shell程序進行的;

            簡單用法2(從私鑰中提取公鑰):rsa
            #openssl rsa -in /PATH/TO/PRIVATE_KEY_FILE -pubout
            1.從test.key提取公鑰并輸出在螢幕上
            #openssl rsa -in test.key -pubout


    系統上随機數生成器:random,urandom

        熵池:用來儲存硬體中斷産生的随機數。被映射為兩個裝置檔案:
        /dev/random:僅從熵池中傳回随機數,當熵池中的随機數耗盡時,取随機數的程序将會被阻塞
        /dev/urandom:先從熵池中取随機數,當熵池中的随機數耗盡時,就通過僞随機數生成器生成随機數


    X.509版證書格式:
    ![這裡寫圖檔描述](https://img-blog.csdn.net/20150813215310271)




    獲驗證書的方法:
        1.向RA注冊申請
        2.建立私有CA,主要工具:OpenSSL

    使用OpenSSL建構私有CA:
        1.生成私鑰(私鑰用于簽發證書時,向證書添加數字簽名使用)
        2.生成自簽署證書(證書用于實作與每個通信方都導入此證書至“受信任的證書頒發機構”)

        配置檔案:/etc/pki/tls/openssl.cnf
        工作目錄:/etc/pki/CA/

        #cd /etc/pki/CA/;ls
        certs crl newcerts private
            certs:證書存放位置
            crl:證書吊銷清單存放位置
            newcerts :新建立的證書存放位置
            private:CA自己私鑰的存放位置,cakey.pem為其私鑰
        生成CA的私鑰,儲存在private/下名為cakey.pem的檔案,密鑰長度為2048位
        #(umask 077 ;openssl genrsa -out private/cakey.pem 2048)

        生成自簽證書的指令 :req,自請自簽,
        #openssl req -new -x509 -key private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650
            -new:表示生成的新的證書簽署請求
            -x509:表示自己跟自己簽證,直接輸出自簽署的證書檔案,通常隻有建構CA的時候才用
            -key private/cakey.pem :指明私鑰的位置,用于提取公鑰
            -out /etc/pki/CA/cacert.pem :表示将生成的證書儲存在/etc/pki/CA/cacert.pem檔案裡面
            -days 3650:表示簽署證書的有效期為10年,機關為“天”
        然後繼續簽署即可,建構私有證書就完成了

        給節點發證書
            1.節點申請證書
                (在證書申請的主機上進行如下步驟)
                (1)生成私鑰
                (2)生成證書簽署請求
                (3)把請求發送給CA

                【注意:】
                    (1)其中的subject資訊部分,要與CA的保持一緻
                    (2)Common Name要使用此主機在通信真實使用名字

            2.CA簽發證書
                (1)驗證請求者資訊
                (2)直接簽署證書
                    #openssl  ca -in /PATH/FROM/CSR_FILE -out /PATH/TO/CRT_FILE -days N
                (3)把簽好的證書發還給請求者
            3.提供輔助檔案


            示例:在web伺服器下
            #cd /etc/httpd/;ls
            #mkdir ssl
            #cd ssl/
            生成私鑰
            #(umask 077 ;openssl genrsa -out httpd.key  1024)
            生成證書簽署請求
            #openssl req -new -key httpd.key -out httpd.csr
            簽署請求即可

            将證書請求發送給CA伺服器端(若在同一台主機上就不用發了)

            建立CA所需要的檔案:index.txt,serial
            #cd /etc/pki/CA;ls
            #touch index.txt
            #echo 01 > serial

            簽署請求
            #openssl ca -in /etc/httpd/ssl/httpd.csr -out /etc/httpd/ssl/httpd.crt -days 3650


    吊銷證書
        (1)擷取吊銷證書的序列号
        #openssl x509 -in /PATH/FROM/CRT_FILE -noout -serial -subject 
        (2)CA實作證書吊銷
            1.吊銷證書
            #openssl ca -revoke /PATH/FROMCRT_FILE 
            2.生成吊銷證書的編号
            #echo 01 > /etc/pki/CA/crl/number
            3.更新證書吊銷清單
            #openssl crl -gencrl -out THISCA.crl

        示例:接上
        #openssl x509 -in /etc/httpd/ssl/httpd.crt -noout -serial -subject

    子指令:genrsa,req ,ca,x509,crl
           

繼續閱讀