圖解SSL和加密解密

1.SSL原理

    Secure Sockets Layer(安全的套接字層)位於TCP/IP協議與各種應用層協議之間,爲數據通訊提供安全支持。用於保障在Internet上數據傳輸之安全,利用數據加密技術,可確保數據在網絡上之傳輸過程中不會被截取及竊聽。



2.SSL的會話過程

            SSL會話主要分爲三步:

                    1.客戶端向服務器端索要並驗正證書;

                    2.雙方協商生成“會話密鑰”;對成密鑰

                                    3.雙方採用“會話密鑰”進行加密通信;

wKioL1cGUbjQZyizAAHJ_gSatco560.png




3.加密算法和協議


wKiom1cGVfKAY_0HAAEvWb3_BB4884.png


3.1 對稱加密

    加密和解密使用同一個密鑰

常見的加密算法:

    DES、3DES、AES、Blowfish、Twofish、IDEA、RC6、CAST5

特性:

    1、加密、解密使用同一個密鑰;

    2、將原始數據分割成爲固定大小的塊,逐個進行加密;

缺陷:

    1、密鑰過多;

    2、密鑰分發困難;


3.2 公鑰加密

            密鑰分爲公鑰與私鑰

公鑰:從私鑰中提取產生;可公開給所有人;

私鑰:通過工具創建,使用者自己留存,必須保證其私密性;


特點:用公鑰加密的數據,只能使用與之配對兒的私鑰解密;反之亦然

用途:

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

密鑰交換:發送方用對方公鑰加密一個對稱密鑰,併發送給對方;

數據加密:


3.3  單向加密

    提取數據指紋(特徵碼);只能加密,不能解密;

常見算法:md5、sha1

特性:定長輸出、雪崩效應;

功能:完整性;


3.4 密鑰交換

    IKE(Internet Key Exchange互聯網密鑰交換)

1.公鑰加密

2.DH(Deffie-Hellman地獄男爵)



4.PKI

    PKI是Public Key Infrastructure的首字母縮寫,翻譯過來就是公鑰基礎設施;PKI是一種遵循標準的利用公鑰加密技術爲電子商務的開展提供一套安全基礎平臺的技術和規範


公鑰基礎設施主要包含以下四個:

簽證機構:CA

註冊機構:RA

證書吊銷列表:CRL

證書存取庫



5.openssl命令


openssl有衆多子命令,基本可分爲三類:

            1.標準命令

            2.消息摘要命令(dgst子命令)

            3.加密命令(enc子命令)

5.1 對稱加密

加密:~]# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext
解密:~]# openssl enc -d -des3 -a -salt -out fstab -in fstab.ciphertext

5.2 單向加密

        ~]# openssl dgst -md5 /PATH/TO/SOMEFILE

5.3 生成用戶密碼

         ~]# openssl passwd -1 -salt $(openssl rand -hex 5)

5.4 生成隨機數

        ~]# openssl rand -hex NUM    
        ~]# openssl rand -base64 NUM

5.5 公鑰加密

生成私鑰:~]# (umask 077; openssl genrsa -out /PATH/TO/PRIVATE_KEY_FILE NUM_BITS)
提取公鑰:~]# openssl rsa -in /PATH/FROM/PRIVATE_KEY_FILE -pubout



6.構建私有CA


1.在CA的服務器上生成私鑰

[root@ch sysroot]# (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)

2.生成自簽證書

[root@ch sysroot]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365

Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Beijing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:CH
Organizational Unit Name (eg, section) []:Ops
Common Name (eg, your name or your server's hostname) []:ch
Email Address []:

3.爲CA提供所需的目錄及文件

[root@ch sysroot]# mkdir  -pv  /etc/pki/CA/{certs,crl,newcerts}
[root@ch sysroot]# touch  /etc/pki/CA/{serial,index.txt}
[root@ch sysroot]# echo  01 > /etc/pki/CA/serial

以上步驟是在CA服務器端操作




http服務器向CA請求籤署證書


a.主機生成私鑰

[root@localhost ~]# mkdir /etc/httpd/ssl
[root@localhost ~]# cd /etc/httpd/ssl
[root@localhost ssl]# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 1028)

b.生成證書籤署請求

[root@localhost ssl]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365

Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Beijing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:CH
Organizational Unit Name (eg, section) []:Ops
Common Name (eg, your name or your server's hostname) []:www.test.com   
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

c.將請求通過可靠方式發送給CA服務器

[root@localhost ssl]# scp httpd.csr [email protected]:/tmp/


以上操作是在http服務器端操作



4.在CA主機上籤署證書

[root@ch tmp]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365

Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Mar 26 04:17:02 2016 GMT
            Not After : Mar 26 04:17:02 2017 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = Beijing
            organizationName          = CH
            organizationalUnitName    = Ops
            commonName                = www.test.com

Certificate is to be certified until Mar 26 04:17:02 2017 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n] y
Write out database with 1 new entries
Data Base Updated


5.查看證書中的信息

[root@ch tmp]# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
serial=01
subject= /C=CN/ST=Beijing/O=CH/OU=Ops/CN=www.test.com




如果http服務的私鑰丟了,這個時候我們需要吊銷證書


(a).客戶端獲取要吊銷的證書的serial

[root@localhost ssl]# openssl  x509  -in /etc/pki/CA/certs/httpd.crt  -noout  -serial  -subject
serial=01
subject= /C=CN/ST=Beijing/O=CH/OU=Ops/CN=CH


(2).CA服務器根據客戶提交的serial和subject信息,對比其與本機數據庫index.txt中存儲的是否一致

[root@ch tmp]# cd /etc/pki/CA/
[root@ch CA]# cat index.txt
V	170326041702Z	01	unknown	/C=CN/ST=Beijing/O=CH/OU=Ops/CN=www.test.com


(3).CA服務器吊銷證書

[root@ch CA]# openssl ca -revoke /etc/pki/CA/newcerts/01.pem
Using configuration from /etc/pki/tls/openssl.cnf
Revoking Certificate 01.
Data Base Updated


(4).生成吊銷證書的吊銷編號(僅在第一次吊銷證書時執行)

[root@ch CA]#  echo  01  > /etc/pki/CA/crlnumber


(5).更新證書吊銷列表

[root@ch CA]# openssl ca -gencrl -out /etc/pki/CA/httpd.crl


查看crl文件

[root@ch CA]# openssl crl -in httpd.crl -noout  -text
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章