一、OpenSSL簡介;
SSL是Secure Sockets Layer(安全套接層協議)的縮寫,可以在Internet上提供祕密性傳輸。Netscape公司在推出第一個Web瀏覽器的同時,提出了SSL協議標準。其目標是保證兩個應用間通信的保密性和可靠性,可在服務器端和用戶端同時實現支持。已經成爲Internet上保密通訊的工業標準。
SSL能使用戶/服務器應用之間的通信不被***者竊聽,並且始終對服務器進行認證,還可選擇對用戶進行認證。SSL協議要求建立在可靠的傳輸層協議(TCP)之上。SSL協議的優勢在於它是與應用層協議獨立無關的,高層的應用層協議(例如:HTTP,FTP,TELNET等)能透明地建立於SSL協議之上。SSL協議在應用層協議通信之前就已經完成加密算法、通信密鑰的協商及服務器認證工作。在此之後應用層協議所傳送的數據都會被加密,從而保證通信的私密性。
OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協議,並提供豐富的應用程序供測試或其它目的使用。
二、加密方式及算法;
對稱加密:http://baike.baidu.com/view/119320.htm#2
單向加密:http://book.51cto.com/art/201102/245328.htm
三、SSL握手協議;
更多詳細信息請參考;http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html
四、OpenSSL 應用
4.1 OpenSSL程序包
libcrypto:公共加密庫
libssl:ssl協議的實現
openssl:多用途的命令行工具,各功能分別使用子命令實現生成密鑰、創建數字證書、手動加密解密數據;
4.2 OpenSSL加密應用
4.2.1對稱加密:
工具:openssl enc, gpg
算法:des, 3des, aes, blowfish, twofhish, rc6, idea, cast5
enc工具:
加密:# openssl enc -e -CIPHERNAME -a -salt -in /path/from/somefile -out /path/to/somecipher.file
解密:# openssl enc -d -CIPHERNAME -a -salt -in /path/from/somecipher.file -out /path/to/someclear.file
解析:-e:加密encrypt
-d:解密decrypt
-ciphername:加密算法
-a/-base64:基於base64編碼
-salt:在密文中加入salt
-in /path/from/somefile:要加密/解密的輸入文件,缺省爲標準輸入
-out /path/to/somecipher.file:要加密/解密的輸出文件,缺省爲標準輸出
4.2.2單向加密:
特性:One-Way, Collision-free
算法:md5, sha1, sha256, sha384, sha512
工具:md5sum, sha1sum, sha256sum, sha512sum, openssl dgst, chsum
用法:# openssl dgst [-md5|-sha1] [-out /path/to/somedgst.file] /path/from/someclear.file
解析:[-md5|-sha1]:加密算法
[-out /path/to/somedgst.file]:加密後的輸出文件保存路徑
/path/from/someclear.file:指名對哪個文件做加密計算
MAC:消息認證碼,單向加密的一種延伸應用,用於實現在網絡通信中保證所傳輸的數據的完整性;
機制:
CBC-MAC
HMAC: 使用md5或sha1算法
生成用戶密碼:
openssl passwd -1 -salt SALT(加入數字或者其他salt,一般爲八位,也可以跟上‘openssl rand -base64|-hex NUM ’,則每次salt不會固定)
生成隨機數:
openssl rand -base64|-hex NUM (對輸出結果編碼,-hex爲16進制編碼)
NUM: 表字節;-hex時,每個字符爲4位,因此,兩個字符爲一個字節;生成八位隨機數,NUM爲4即可
4.2.3公鑰加密:
(1)加密:
算法:RSA, ELGamal
工具:gpg, openssl rsautl
(2)數字簽名:
算法:RSA, DSA, ELGamal
DSA:Digital Signature Algorithm
DSS: Digital Signature Standard
(3)密鑰交換:
算法:公鑰加密、DH:Diffie-Hellman
(4)生成密鑰對兒:
# (umask 077; openssl genrsa -out /path/to/PRIVATEKEY.FILENUM_BITS)
從私鑰中提取公鑰:
# openssl rsa -in /patn/from/PRIVATEKEY.FILE -pubout
五、常見縮略語
SSL技術白皮書鏈接:http://www.h3c.com.cn/Products___Technology/Technology/Security_Encrypt/Other_technology/Technology_book/200812/622834_30003_0.htm