OpenSSL從基礎到應用系列: |
1) OpenSSL之安全通信基礎 算法
2) OpenSSL之PKI數據庫
4) OpenSSL之編譯安裝ide
透過上面幾個方面的學習,咱們應該對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版本(SSLv二、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: |
用途: