OpenSSL 功能介紹
1 概述
OpenSSL 是一個安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協議,並提供豐富的應用程序供測試或其它目的使用。
OpenSSL是實現安全套接字層(SSL v2 / v3)和傳輸層安全(TLS v1)網絡協議及其所需的相關加密標準的加密工具包。
OpenSSL:開源項目
三個組件:
openssl: 多用途的命令行工具,包openssl
libcrypto: 加密算法庫,包openssl-libs
libssl:加密模塊應用庫,實現了ssl及tls,包nss
.openssl命令:
兩種運行模式:交互模式和批處理模式
opensslversion:程序版本號
標準命令、消息摘要命令、加密命令
標準命令:enc, ca, req, ...
查看幫助:openssl ?
可以通過openssl 來創建CA和頒發證書,文章http://ghbsunny.blog.51cto.com/7759574/1964754
有做介紹,本文僅介紹openssl這個工具包的其他常用功能
2 案例介紹
2.1 對稱加密
工具:openssl enc, gpg,文章 http://ghbsunny.blog.51cto.com/7759574/1964887 已經介紹
算法:3des, aes, blowfish, twofish
.enc命令:
對稱密碼命令允許使用基於密碼或明確提供的密鑰的各種塊和流密碼來加密或解密數據。 Base64編碼或解碼也可以通過本身或加密或解密來執行。
The symmetric cipher commands allow data to be encrypted or decrypted using various block and stream ciphers using keys based on passwords or explicitly provided. Base64 encoding or decoding can also be performed either by itself or in addition to the encryption or decryption.
幫助:man enc
例子
加密文件
以下命令運行需要輸入一個密碼,當解密的時候需要輸入相同的密碼才能解密,這裏新生成的文件後綴名不一定是cipher,可以自己指定
openssl enc -e -des3 -a -salt -in testfile -out testfile.cipher
解密文件
openssl enc -d -des3 -a -salt –in testfile.cipher -out testfile
2.2 公鑰加密
公鑰加密生成非對稱的密鑰
算法:RSA, ELGamal
工具:gpg, openssl rsautl(man rsautl)
數字簽名:
算法:RSA, DSA, ELGamal
密鑰交換:
算法:dh
DSA: Digital Signature Algorithm
DSS:Digital Signature Standard
RSA公鑰加密算法是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的。命名是取其名字首字母組合成RSA
RSA公鑰與私鑰主要用於數字簽名(Digital Signature)與認證(Authentication),我們一般也稱之為不對稱加密/解密。
2.2.1 生成密鑰對
幫助:man genrsa
.生成私鑰,這個生成密鑰的過程要掌握
openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS
私鑰文件生成後,建議把權限改成600,保護,放在被其他人查看密碼信息
私鑰裏的文件,如果被拿到,沒有通過des這關鍵字加密的話,就相當於是明文
這個命令執行的時候,要輸入八位數的密碼,當要使用這個私鑰的時候需要輸入密碼
(umask 077; openssl genrsa –out test.key –des 2048)
括號表示子進程,結束後,umask就會恢復未默認的值,umask的值使得其他人和組都沒有任何權限,是為了保護生成的私鑰
2.2.2 從私鑰中提取出公鑰,導出公鑰
公鑰推不出私鑰,私鑰可以推出公鑰
openssl rsa -in PRIVATEKEYFILE –pubout –out PUBLICKEYFILE
Openssl rsa –in test.key –pubout –out test.key.pub
公鑰是公開的,可以不設置權限,以上是生成公鑰
2.2.3 公鑰加密文件
openssl rsautl -encrypt -in input.file -inkey pubkey.pem -pubin -out output.file
-in 指定被加密的文件
-inkey 指定加密公鑰文件
-pubin 表面是用純公鑰文件加密
-out 指定加密後的文件
例子:
openssl rsautl -encrypt -in ftpback -inkey test.key.pub -pubin -out ftpssl
2.2.4 私鑰解密文件
openssl rsautl -decrypt -in input.file -inkey key.pem -out output.file
-in 指定需要解密的文件
-inkey 指定私鑰文件
-out 指定解密後的文件
例子:
openssl rsautl -decrypt -in ftpssl -inkey test.key -out ftpdec
2.3 單向加密
單向加密即獲取摘要
工具:md5sum, sha1sum, sha224sum,sha256sum…
openssl dgst
dgst:摘要功能輸出所提供文件的消息摘要或十六進制形式的文件。 它們也可用於數字簽名和驗證。
The digest functions output the message digest of a supplied file or files in hexadecimal form. They can also be used for digital signing and verification.
.dgst命令:
幫助:man dgst
openssl dgst -md5 [-hex默認] /PATH/SOMEFILE
openssl dgst -md5 testfile
以上命令將文件生成一個固定長度的摘要值,算法是md5,大小占128bite
md5sum /PATH/TO/SOMEFILE
以上這兩個md5得到的結果是一樣的
.MAC: Message Authentication Code,單向加密(hash)的一種延伸應用,用於實現網絡通信中保證所傳輸數據的完整性機制
MAC 消息認證碼,構造方法可以基於hash,也可以基於對稱加密算法,HMAC是基於hash的消息認證碼。數據和密鑰作為輸入,摘要信息作為輸出,常用於認證。
源文檔 <http://www.cnblogs.com/gordon0918/p/5382541.html>
2.4 生成用戶密碼
passwd命令:
幫助:man sslpasswd
openssl passwd -1 -salt SALT
-1對應的就是hash的md5算法
SALT:這裏是鹽值,人為指定,使得同一密碼生成的加密值不一樣,最多8位,超過8位沒有意義,比如前面8位一樣,後面還有幾位數不一樣,這樣生成的密碼值是一樣的
openssl passwd -1 –salt centos
grub-md5-crypt同樣生成md5加密的口令,centos為鹽值
比如這裏的密碼我都是輸入123,但是鹽值不一樣,一個是centos,一個是centos6,生成的加密值不一樣
2.5 生成隨機數
幫助:man sslrand
rand命令在播放隨機數生成器一次後輸出num偽隨機字節。 與其他openssl命令行工具一樣,除了-rand選項中給出的文件外,PRNG種子使用文件$ HOME / .rnd或.rnd。 如果從這些來源獲得足夠的播種,將會寫回新的$ HOME / .rnd或.rnd文件。
The rand command outputs num pseudo-random bytes after seeding the random number generator once. As in other openssl command line tools, PRNG seeding uses the file $HOME/.rnd or .rnd in addition to the files given in the -rand option. A new $HOME/.rnd or .rnd file will be written back if enough seeding was obtained from these sources.
openssl rand -base64|-hex NUM
指定數字生成隨機數,如果是-hex 後面的數值比如6,那麽生成的長度是12位,因為hex生成的隨機數是16進制組合的數,hex 後面的num是字節數,一個16進制數占用4位,半個字節
base後面可以生成隨機密碼
base64 生成隨機的數,可以用任何字符,也可以把圖片保存成base64的格式,通過base64生成的圖片,可以
用base64來還原出圖片
NUM: 表示字節數;-hex時,每個字符為十六進制,相當於4位二進制,出現的字符數為NUM*2
3 總結
openssl還有很多用法,本文僅單純介紹了其中一部分,更多用法請使用幫助 man openssl 進行查看
本文出自 “自學linux” 博客,請務必保留此出處http://ghbsunny.blog.51cto.com/7759574/1964988
OpenSSL 功能介紹