OpenSSL原理及基本使用

OpenSSL原理

  SSL:SSL是Secure Sockets Layer(安全套接層協議)的縮寫,可以在Internet上提供祕密性傳輸。Netscape(網景)公司在推出第一個Web瀏覽器的同時,提出了SSL協議標準。其目標是保證兩個應用間通信的保密性和可靠性,可在服務器端和用戶端同時實現支持。已經成爲Internet上保密通訊的工業標準。

SSL能使用戶/服務器應用之間的通信不被***者竊聽,並且始終對服務器進行認證,還可選擇對用戶進行認證。SSL協議要求建立在可靠的傳輸層協議(TCP)之上。SSL協議的優勢在於它是與應用層協議獨立無關的,高層的應用層協議(例如:HTTP,FTP,TELNET等)能透明地建立於SSL協議之上。SSL協議在應用層協議通信之前就已經完成加密算法、通信密鑰的協商及服務器認證工作。在此之後應用層協議所傳送的數據都會被加密,從而保證通信的私密性。

OpenSSL開放式安全套接層協議:是一個強大的安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協議,並提供豐富的應用程序供測試或其它目的使用。

OpenSSL整個軟件包大概可以分成三個主要的功能部分:SSL協議庫、應用程序以及密碼算法庫。OpenSSL的目錄結構自然也是圍繞這三個功能部分進行規劃的。

基本功能有:主要的密碼算法(MD5、SHA、DH、BASE64等等)、常用的密鑰和證書封裝管理功能以及SSL協議,並提供了豐富的應用程序供測試或其它目的使用。

輔助功能:如從口令生成密鑰的API,證書籤發和管理中的配置文件機制等

OpenSSL支持多種不同的算法

對稱加密:

AES, Blowfish, Camellia, SEED, CAST-128, DES, IDEA, RC2, RC4, RC5, Triple DES, GOST 28147-89[3]

單向加密:

    MD5, MD2, SHA-1, SHA-2, RIPEMD-160, MDC-2, GOST R 34.11-94[3]

非對稱加密:

    RSA, DSA, Diffie–Hellman key exchange, Elliptic curve, GOST R 34.10-2001[3]

這些都爲官方解釋,簡單的理解爲openssl就是一個集合,這個集合裏面集成了許多的加密算法,而這些加密算法的使用方式都不同,所以openssl就用自己的功能來調用它們從而達到數據加密的效果。

OpenSSL基本使用

  OpenSSL程序包由:openssl、libcrypto、libssl三個軟件包組成

openssl:多用途的命令行工具,各功能分別使用子命令實現

libcrypto:公共加密庫(存放了各種加密算法)

libssl:ssl協議的實現


        OpenSSL命令行使用方法:

         openssl command [command_options] [args]

         查看openssl版本:openssl version

wKiom1SO4unTyWJRAAEA7fbmrqk055.jpg

可以看出當前centos系統內置版本爲1.0.1e(未升級前的版本,此版本帶有漏洞,如需生產環境使用請自行下載1.0.1g版本以後的版本)

OpenSSL實現對稱加密,使用enc這個子命令,使用方法 :

加密方法:

openssl enc -e -算法 -a -salt -in 原文件 -out 加密後保存的文件

解密方法:

openssl enc -d -算法 -a -salt -in 加密文件 -out 解密後保存的文件

-e:encrypt加密

-d:decrypt解密

-a:基於base64

-salt:加“鹽”,可以理解爲添加了一個隨即數,每次生成的隨機數都是不同的就算使用相同    密碼結果也是不同的。

注:加密和解密算法必須使用相同的算法,不然會導致解密出來的內容爲亂碼

示例1:加密etc目錄下的passwd文件並保存到當前目錄下

        openssl enc -e -des -a -salt -in /etc/passwd -out ./passwd.crypt

wKioL1SO5F6gROxYAAF_zmcLt2E831.jpg

        加密完後繼續編輯文件會發現是一堆密碼

wKiom1SO4-3C7SXsAAXkXLQWgC4248.jpg

        解密文件

        openssl enc -d -des -a -salt -in passwd.crypt -out passwd

wKiom1SO5Jajr9xrAAFV6WjOTvo195.jpg

        再次打開此文件會發文件正常使用

wKiom1SO5Maj3G8MAAO0cjjFcOY862.jpg

OpenSSL 實現非對稱加密,也就是所說的公鑰和私鑰,使用genrsa子命令,非對稱加密是通過生成私鑰來提取公鑰因此私鑰不可以讓除當前用戶以外的任何用戶可以查看到。

加密方法:

        (umask 077;openssl genrsa -out 私鑰保存位置  加密長度)

這裏的括號代表在子進程中運行因爲要修改umask值並且這行命令運行完成後子shell就會退出並不會影響到當前系統中的umask值,使用分號代表在同一行執行命令

        提取公鑰

        openssl rsa -in 私鑰 -pubout

        實例2:生成私鑰文件並且提取出公鑰

(umask 077; openssl genrsa -out crypt.key 2048)

wKiom1SO5TWhNMrtAAGwRLVZuZk408.jpg

提取公鑰:

openssl rsa -in crypt.key -pubout > pub.key

wKioL1SO5frwKIq8AAFEye08wz0562.jpg

        OpenSSL實現單向加密一般用於校驗文件完整性操作,常用有md5和sha1等。(文件被修改後md5值和sha值都會改變)

        加密方法:

        openssl dgst -加密算法 文件路徑

        

        示例3:獲取文件md5值

        openssl dgst -md5 passwd

wKiom1SO5c3CTVQVAAEUum4IwX4258.jpg

        以上加密方法都可以使用--help來獲取幫助信息也可以使用man手冊頁查看幫助信息

        openssl enc | genrsa | dgst --help或者man enc | genrsa | dgst 

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