1.3 openssl工具基礎

CA和證書

CA(Certificate Authority)簽證機構

    CA是被公認的的網絡信任結構,CA證書的內容包括:

    頒發者 
    使用者 
    版本 
    簽名算法 
    簽名哈希算法 
    使用者 
    公鑰 
    指紋 
    指紋算法 

    …… 

CA的作用是爲網絡中通信雙方的公鑰提供可信任數字簽名。


SSL安全協議

    說到 CA,就不得不說 SSL 。SSL 是一個安全協議,它提供使用 TCP/IP 的通信應用程序間的隱私與完整性。因特網的 HTTPS 使用 SSL 來實現安全的通信。

    SSL鏈接總是由客戶端機發起,SSL握手的流程大致如下:

(1) 客戶端發送列出客戶端密碼能力的客戶端“您好”消息(以客戶端首選項順序排序),如 SSL 的版本、客戶端支持的密碼對和客戶端支持的數據壓縮方法。消息也包含 28 字節的隨機數。

(2) 服務器以服務器“您好”消息響應,此消息包含密碼方法(密碼對)和由服務器選擇的數據壓縮方法,以及會話標識和另一個隨機數。

    注意:客戶端和服務器至少必須支持一個公共密碼對,否則握手失敗。服務器一般選擇最大的公共密碼對。

(3) 服務器發送其SSL數字證書。(服務器使用帶有 SSL 的 X.509 V3 數字證書。)

    如果服務器使用 SSL V3,而服務器應用程序(如 Web 服務器)需要數字證書進行客戶端認證,則客戶端會發出“數字證書請求”消息。在 “數字證書請求”消息中,服務器發出支持的客戶端數字證書類型的列表和可接受的CA的名稱。

(4) 服務器發出服務器“您好完成”消息並等待客戶端響應。

(5) 一接到服務器“您好完成”消息,客戶端( Web 瀏覽器)將驗證服務器的SSL數字證書的有效性並檢查服務器的“你好”消息參數是否可以接受。

    如果服務器請求客戶端數字證書,客戶端將發送其數字證書;或者,如果沒有合適的數字證書是可用的,客戶端將發送“沒有數字證書”警告。此警告僅僅是警告而已,但如果客戶端數字證書認證是強制性的話,服務器應用程序將會使會話失敗。

(6) 客戶端發送“客戶端密鑰交換”消息。
    此消息包含 pre-master secret (一個用在對稱加密密鑰生成中的 46 字節的隨機數字),和 消息認證代碼 ( MAC )密鑰(用服務器的公用密鑰加密的)。
如果客戶端發送客戶端數字證書給服務器,客戶端將發出簽有客戶端的專用密鑰的“數字證書驗證”消息。通過驗證此消息的簽名,服務器可以顯示驗證客戶端數字證書的所有權。

注意: 如果服務器沒有屬於數字證書的專用密鑰,它將無法解密 pre-master 密碼,也無法創建對稱加密算法的正確密鑰,且握手將失敗。

(7) 客戶端使用一系列加密運算將 pre-master secret 轉化爲 master secret ,其中將派生出所有用於加密和消息認證的密鑰。然後,客戶端發出“更改密碼規範” 消息將服務器轉換爲新協商的密碼對。客戶端發出的下一個消息(“未完成”的消息)爲用此密碼方法和密鑰加密的第一條消息。

(8) 服務器以自己的“更改密碼規範”和“已完成”消息響應。

(9) SSL 握手結束,且可以發送加密的應用程序數據。

X.509:定義了證書的結構以及認證協議標準

    版本號
    序列號
    簽名算法
    頒發者
    有效期限
    主體名稱
    主體公鑰
    CRL分發點
    擴展信息
    發行者簽名

數字證書的類型

    證書授權機構的證書、服務器、用戶證書

獲取證書的方法

使用證書授權機構,CA的數字證書由自己使用 X.509 頒發
    生成簽名請求(csr)
    將csr發送給CA
    從CA處接收簽名
自簽名的證書
    自已簽發自己的公鑰

OpenSSL

    base64編碼


    base64類型的編碼能夠將不可讀的二進制數據轉換爲可讀的文本。其原理是:將二進制數據以每6個(2^6=64)一組進行分段,再將其十進制對應的字符輸出,不足64位的使用=補齊。

    對稱加密

使用 enc 子命令完成對稱加密/解密

[root@CentOS6 data]# openssl enc -des3 -a -salt -in fstab -out fstab.3des
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:
[root@CentOS6 data]# ll fstab*
-rw-r--r-- 1 root root 595 May 19 14:52 fstab
-rw-r--r-- 1 root root 837 May 19 20:48 fstab.3des
[root@CentOS6 data]# openssl enc -d -des3 -a -salt -in fstab.3des -out fstab
enter des-ede3-cbc decryption password:
[root@CentOS6 data]# ll fstab*
-rw-r--r-- 1 root root 595 May 19 21:10 fstab
-rw-r--r-- 1 root root 837 May 19 20:48 fstab.3des

    命令中選項

-e 默認爲使用-e選項,所以缺省
-des3 使用3DES加密算法
-salt 使用鹽,保證同一個文件的加密生成的密文每次不同
-in 需要openssl處理的文件

-out 處理完輸出的文件

    單向加密

使用 dgst 子命令完成單向加密

[root@CentOS7 data]#⮀openssl dgst -sha256 fstab 
SHA256(fstab)= 9e898bd405a9c2e76ea0f3f4cf44f4ddb13c5d2c8e98f55caee6bfd1e854afb8

缺省了-hex選項:使用十六進制輸出加密信息

    生成加密口令和隨機數

使用 passwd 子命令生成加密口令

root@CentOS7 data]# openssl passwd -1   默認生成加密口令時會添加鹽,-1選項使用MD5加密
Password: 
Verifying - Password: 
$1$OuBYlDPg$SIRQgUX31hR0Ua3J6ftqk0
[root@CentOS7 data]# openssl passwd -1   #兩次密碼相同,但生成的加密口令並不相同
Password: 
Verifying - Password: 
$1$PawArx1w$U4BkMGKvz14RIRwXd.ynM0
[root@CentOS7 data]# openssl passwd -1 -salt "OuBYlDPg"   #使用-salt選項可以指定鹽,與第一次生成相同的加密口令
Password: 
$1$OuBYlDPg$SIRQgUX31hR0Ua3J6ftqk0

使用 rand 子命令生成隨機數

[root@CentOS7 data]#⮀openssl rand -hex 12  #生成12字節的十六進制表示的隨機數
4a3129cb49989274389b2179
[root@CentOS7 data]#⮀openssl rand -base64 12   #生成12字節的base64編碼的隨機數
Enh76ZTmZaUXNvq1









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