OpenSSL之命令詳解

OpenSSL從基礎到應用系列:

       1) OpenSSL之安全通訊基礎 

       2) OpenSSL之PKI

       3) OpenSSL之SSL協議的Web安全實現

       4) OpenSSL之編譯安裝

        

透過上面幾個方面的學習,我們應該對OpenSSL有了一個基本的瞭解。OpenSSL功能之強大,命令組合用法之多,往往讓我們的學習不知所措。在此,我們來對openssl命令的使用做一個總結


OpenSSl命令總覽:

語法格式:

openssl command [ command_opts ] [ command_args ]

常用command:

version    用於查看版本信息

enc        用於加解密

ciphers    列出加密套件

genrsa     用於生成私鑰

rsa        RSA密鑰管理(例如:從私鑰中提取公鑰)

req        生成證書籤名請求(CSR)

crl        證書吊銷列表(CRL)管理

ca         CA管理(例如對證書進行簽名)

dgst       生成信息摘要

rsautl     用於完成RSA簽名、驗證、加密和解密功能

passwd     生成散列密碼

rand       生成僞隨機數

speed      用於測試加解密速度                    

s_client   通用的SSL/TLS客戶端測試工具

X509       X.509證書管理

verify      X.509證書驗證

pkcs7       PKCS#7協議數據管理



OpenSSL命令---version:

用途:

version命令用來打印版本以及openssl其他各種信息。

用法:


openssl version [-a] [-v] [-b] [-o] [-f] [-p] [-d]

選項說明:

-a:打印所有信息。

-v:僅打印版本信息

-b:打印當前版本構建的日期

-o:庫構建時的相關信息

-f:編譯參數

-p:平臺信息

-d: 列出openssl的安裝目錄



OpenSSL命令---enc:

用途:

對稱加密算法工具。它能夠運用塊或流算法對數據進行加解密。還能夠將加解密的結果進行base64編碼。

用法:

openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] 

[-d] [-a/-base64] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt]

[-salt] [-nosalt] [-z] [-md] [-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] 

[-engine id]

選項說明:

-ciphername:對稱算法名稱,此命令有兩種使用方式:-ciphername方式或者省略enc直接使用ciphername。

-in filename:要加密/解密的輸入文件,默認爲標準輸入。

-out filename:要加密/解密的輸出文件,默認爲標準輸出。

-pass arg:輸入文件如果有密碼保護,指定密碼來源。

-e:進行加密操作,默認操作。可以省略

-d:進行解密操作。

-a:使用base64編碼對加密結果進行處理。加密後進行base64編碼,解密前進行base64解密。

-base64:同-a選項。

-A:默認情況下,base64編碼爲一個多行的文件。使用此選項,可以讓生成的結果爲一行。解密時,必須使用同樣的選項,否則讀取數據時會出錯。

-k:指定加密口令,不設置此項時,程序會提示用戶輸入口令。

-kfile:指定口令存放文件。可以從這個口令存放文件的第一行讀取加密口令。

-K key:使用一個16進制的輸入口令。如果僅指定-K key而沒有指定-k password,必須用-iv選項指定IV。當-K key和-k password都指定時,用-K選項給定的key將會被使用,而使用password來產生初始化向量IV。不建議兩者都指定。

-iv IV:手工指定初始化向量(IV)的值。IV值是16進制格式的。如果僅使用-K指定了key而沒有使用-k指定password,那麼就需要使用-iv手工指定IV值。如果使用-k指定了password,那麼IV值會由這個password的值來產生。

-salt:產生一個隨機數,並與-k指定的password串聯,然後計算其Hash值來防禦字典***和rainbow table***。

       rainbow table***:用戶將密碼使用單向函數得到Hash摘要並存入數據庫中,驗證時,使用同一種單向函數對用戶輸入口令進行Hash得到摘要信息。將得到的摘要信息和數據中該用戶的摘要信息進行比對,一致則通過。考慮到多數人使用的密碼爲常見的組合,***者可以將所有密碼的常見組合進行單向Hash,得到一個摘要組合。然後與數據庫中的摘要進行比對即可獲得對應的密碼。

      salt將隨機數加入到密碼中,然後對一整串進行單向Hash。***者就很難通過上面的方式來得到密碼。

-S salt:使用16進制的salt。

-nosalt:表示不使用salt。

-z:壓縮數據(前提是OpenSSL編譯時加入了zip庫)。

-md:指定摘要算法。如:MD5  SHA1  SHA256等。

-p:打印出使用的salt、口令以及初始化向量IV。

-P:打印出使用的salt、口令以及IV,不做加密和解密操作,直接退出。

-bufsize number:設置I/O操作的緩衝區大小。因爲一個加密的文件可能會很大,每次能夠處理的數據是有限的。

-nopad:沒有數據填充(主要用於非對稱加密操作)。

-debug:打印調試信息。

-none:不對數據進行加密操作。

-engine:指定硬件引擎。


注意: 密碼可以用來產生初始化密鑰key和初始化向量IV。

       新版的OpenSSL必須使用-salt選項。


OpenSSL支持的加密算法:des  des3  bf  cast cast5 rc2 rc4 rc5 aes等


使用實例:

對文件進行base64編碼:

# which ls

# cp /bin/ls .

# file ls

# openssl base64 -in ls -out ls.b64

# file ls.b64


對base64編碼文件進行解碼:

# rm -rf ls

# openssl base64 -d -in ls.b64 -out ls

# file ls


使用des3加密文件並在密碼結果中加入salt:

# echo "Hello World" >file.txt

# cat file.txt

# openssl des3 -salt -k 123456 -in file.txt -out file.des3

# cat file.des3


使用des3解密文件,並使用-k指定密碼:

# openssl des3 -d -salt -k 123456 -in file.des3 -out file2.txt

# cat file2.txt


使用bf算法加密文件,並將加密結果進行base64編碼:

# openssl bf -a -salt -k 123456 -in file.txt -out file.bf

# file file.bf

# cat file.bf


先用base64解碼文件,再解密:

# openssl bf -d -salt -a -k 123456 -in file.bf -out file3.txt

# cat file3.txt


從密碼文件中讀取密碼進行加解密:

# echo "123456" >123.txt

# cat 123.txt

# openssl des3 -salt -kfile 123.txt -in file.txt -out file.des3      //加密

# cat file.des3

# openssl des3 -d -salt -k 123456 -in file.des3 -out file2.txt       //解密

# cat file2.txt

# openssl des3 -d -salt -kfile 123.txt -in file.des3 -out file3.txt  

# cat file3.txt

# echo "654321" >>123.txt

# cat 123.txt

# openssl des3 -salt -kfile 123.txt -in file.txt -out file3.des3

# cat file3.des3

# openssl des3 -d -salt -k 654321 -in file3.des4 -out file4.txt

   //解密失敗 因爲kfile只會讀取密碼文件的第一行作爲密碼進行加密

openssl des3 -d -salt -k 654321 -in file3.des4 -out file4.txt

# cat file4.txt


加密文件並進行壓縮

# dd if=/dev/zero of=/tmp/123 bs=100M count=10     //生成一個100M的文件

# openssl des3 -salt -k 123456 -in 123 -out 123.des3    //普通加密

# openssl des3 -salt -k 123456 -z -in 123 -out 123.des3.z   //帶壓縮的加密

# du -sh /tmp/123  /tmp/123.des3  /tmp/123.des3.z      //比較文件大小


打印salt、key和IV的信息:

# rm -rf 123.des3

# openssl des3 -salt -k 123456 -p -in 123 -out 123.des3        //打印信息 並加密

openssl des3 -salt -k 123456 -P -in 123 -out 123.des3.P     //僅打印信息 不加密



OpenSSL命令---ciphers:

用途:

用來展示加密算法套件的工具。它能夠把所有OpenSSL支持的加密算法按照一定規律排列(一般是加密強度)。

用法:

openssl ciphers [-v] [-ssl2] [-ssl3] [-tls1] [cipherlist]

選項說明:

-v:詳細列出所有加密套件。包括SSL版本(SSLv2、SSLv3以及TLS)、密鑰交換算法、身份驗證算法、對稱算法、摘要算法以及該算法是否允許出口。

-ssl2:只列出sslv2使用的加密套件。

-ssl3:只列出sslv3使用的加密套件。

-tls1: 只列出tls使用的加密套件。

cipherlist:列出一個cipher list的詳細內容。此項能列出所有符合規則的加密套件,如果不加-v選項,它只會顯示各個套件名稱。

cipherlist格式:


 openssl ciphers ‘cipherstring1:cipherstring2.....'

          1)可以顯示一個或多個cipher string套件。多個cipher string直接使用分隔符分割。

          2)分隔符:通常使用冒號(:)分割,也可以使用逗號或空格來分割。

          3)每一個cipher string前面都可以加上!、-、+

            -:表示將這個cipher從List中刪除。以後也可以選擇再添加回來。

            +: 表示將這個cipher移動到List的底部

               注意:這個選項不是添加任何新的cipher,而只是移動匹配到的cipher。

            !:表示將這個cipher從List中永久刪除。

          4)@STRENGTH 表示使用加密算法key的長度進行排序。

使用實例:

# openssl ciphers -h          //列出ciphers參數簡要幫助

# openssl ciphers -v -ssl2 

# openssl ciphers -v -ssl3

# openssl ciphers -v -tls1

# openssl ciphers 'SHA1'     //列出所有使用SHA1算法的套件

# openssl ciphers 'SSLv3'    //列出SSLv3所使用的算法

# openssl ciphers 'SHA1+DES'  //列出所有包含SHA1和DES的套件

# openssl ciphers -v 'ALL:eNULL' //詳細列出所有非加密算法

# openssl ciphers -v 'ALL:!ADH:@STRENGTH' //列出所有不包含匿名DH的算法並排序

# openssl ciphers -v '3DES:+RSA' //僅列出包含3DES和RSA算法的套件且將包含RSA的顯示在底部


OpenSSL命令---genrsa:

用途:

用來產生RSA私鑰。

用法:

openssl genrsa [-out filename] [-passout arg] [-des] [-des3] [-idea] [-f4] [-3] 

[-rand   file(s)] [-engine id] [numbits]

選項說明:

-out fiename: 指定輸出文件。如果沒有設定此選項,將會輸出到標準輸出。

-passout arg: 指定密碼來源。

-des|-des3|-idea:用來加密私鑰文件的三種對稱加密算法。

-F4|-3:指定指數。-f4爲0x1001  

-rand file(s):指定隨機種子。

-engine id:硬件引擎。

numbits:  生成的密鑰位數。必須是本指令的最後一個參數。默認爲512bits。

使用實例:

# openssl genrsa -des3 -out prikey.pem -f4 1024


OpenSSL命令---rsa:

用途:


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