Linux openssl介紹
SSL和TLS
了解openssl之前,我們首先要了解SSLTLS是什么。
SSL(Secure Sockets Layer)是一個協(xié)議,叫作安全套接層協(xié)議。旨在為應用層數(shù)據(jù)提供加密的傳輸層通道。,即數(shù)據(jù)從應用層去往傳輸層,會首先被ssl給加密。
但是隨著時間的發(fā)展,SSL的繼任者TLS(Transport Layer Security)傳輸層安全協(xié)議被引入,為網(wǎng)絡連接提供了更高級的安全性,TLS提供更多的加密算法和選擇,所以開始逐漸取代了早期的SSL版本。
例如:
在引入SSL和TLS之前,使用HTTP協(xié)議的請求和響應是明文的,這意味著數(shù)據(jù)包在傳輸過程中容易被第三方竊聽、抓取或篡改。引入SSL/TLS之后,當數(shù)據(jù)從應用層發(fā)送至傳輸層時,它會被SSL或TLS加密。這樣,一個安全的通道被建立,確保數(shù)據(jù)從發(fā)送方(一個端)到接收方(另一個端)的整個路徑都是加密的,從而實現(xiàn)端到端的安全性。
應用層數(shù)據(jù)在前往傳輸層加密的原因;
一直有一個疑問,為什么應用層的數(shù)據(jù)要在傳輸層加密,而不是在網(wǎng)絡層或者其它層進行加密。剛開始以為應用層數(shù)據(jù)肯定要從傳輸層經(jīng)過,如果在傳輸層已經(jīng)被別人捕獲了,在下一層加密沒意義了。后面才認識到這是有考慮的:
1. 在傳輸層對應用層數(shù)據(jù)進行加密,具有很強的選擇性,因為傳輸層加密允許為不同的應用選擇是否需要加密,可以給指定的應用加密,如果在網(wǎng)絡層或者數(shù)據(jù)鏈路層,全部都會被加密。
2. 傳輸層加密能保證端到端的安全性,網(wǎng)絡層或數(shù)據(jù)鏈路層加密可能只會在兩個設備或兩個網(wǎng)絡之間提供加密
3. 將數(shù)據(jù)從傳輸層加密了,在網(wǎng)絡層或數(shù)據(jù)鏈路層被捕獲了別人耶看不懂。
openssl
OpenSSL是一個開源的工具庫和工具集,用于處理SSL和TLS協(xié)議以及對數(shù)據(jù)進行加密和解密的各種操作。
openssl中文網(wǎng)
一般我們最常用的工具,就是這個軟件包里面提供的一個叫作 openssl 的命令行工具,通過它可以實現(xiàn)一些加密算法,像SSL、TLS等等。
在Linux發(fā)行版系統(tǒng)中,一般默認就安裝了openssl工具,通過 openssl verson 就可以查看openssl的版本信息。
openssl基礎用法
實現(xiàn)對稱加密
對稱加密就是加密和解密使用的是同一個密鑰,是通過將原始數(shù)據(jù)分割成若干塊來逐個進行加密,所以效率高、速度快
openssl enc -e 算法類型 -a -salt -in 需要加密的文件 -out 存放加密生成的結果的文件
例如:
openssl enc -e -des3 -a -salt -infile1 -outfile1.cipher
說明:
? 使用 -salt 來加鹽(加鹽就是在進行哈希加密的時候加上隨機字符串)的時候,openssl會自動生成一個隨機的鹽,并在加密過程中使用它
? 除了 -des3 這種堆成加密類型,還有-des等類型。使用 man openssl enc 可以看到其它的一些加密類型應該使用的對應參數(shù)
? 使用 -a 參數(shù)可以將加密后的內容通過base64這種彪馬格式來顯示
實現(xiàn)對稱解密
openssl enc -d 算法類型 -a -salt -in需要解密的文件 -out解密后的問題
例如:
openssl enc -d -des3 -a -salt -infile1.cipher -outfile1_new
說明:
? 算法類型需要和加密時使用的保持一致
? 使用對稱加密的時候會要求提示輸入密碼。因為對稱加密算法使用同一個密碼進行加密和解密
實現(xiàn)非對稱加密
非對稱加密的特點是密鑰成對出現(xiàn),加密和解密用的密鑰不相同,并且通信雙方都需要各自的密鑰和私鑰
? 如果使用公鑰加密、私鑰解密。加密的數(shù)據(jù)只能自己解開,能充分保證數(shù)據(jù)的安全
? 如果使用私鑰加密,公鑰解密。這樣能確定數(shù)據(jù)的來源性,這就是我們所說的數(shù)字簽名
生成私鑰:
openssl genrsa -out存放私鑰的文件 使用的加密算法類型
例如:
openssl genrsa -outb.enc
說明:
? 不指定密鑰的長度,默認長度就是2048,密鑰長度越長,其加密強度就越高,加密何解密時間越長,一般使用默認的就可以了
? 不指定加密算法的類型,默認使用的非對稱加密算法是RSA
? 生成的密鑰默認是按照 PEM格式 輸出,即以base64格式顯示文本信息。
生成公鑰:
公鑰鑰是隱藏在私鑰內部的,可以通過私鑰的到公鑰
openssl rsa -in私鑰文件 -pubout -out提取出來保存的公鑰文件
例如:
實現(xiàn)非對稱解密
公鑰加密:
openssl rsautl -encrypt -pubin -inkey 公鑰文件 -in需要加密的文件 -out加密后的文件
私鑰解密:
openssl rsautl -decrypt -inkey 私鑰文件 -in需要解密的文件 -out解密后的文件
實現(xiàn)單向哈希
hash是一種單向的加密算法,是不可逆的。使用哈希算法加密出來的結果就叫做摘要,這玩意兒有個特點就是長度固定,內容不同。一旦原數(shù)據(jù)發(fā)生改變,摘要也會隨之發(fā)生改變,所以一般用來確認數(shù)據(jù)的完整性,看有沒有被人篡改。
在這里有一個叫作指紋的概念,指紋是每個人獨一無二的,不同的人(數(shù)據(jù))有不同的指紋(摘要),但是只知道了指紋(摘要),也不能知道是誰(不能通過摘要推出原數(shù)據(jù))。
openssl dgst 使用的哈希算法 對哪個文件生成摘要
例如:
openssl dgst file1
說明:
? 不指定哈希算法,默認使用的是 SHA256算法,可以使用 man openssl dgst查看對應選項代表的哈希算法
? 不指定顯示的類型,默認顯示的是十六進制的字符
生成用戶密碼
可以使用openssl來給用戶生成密碼,使用 useradd 命令創(chuàng)建用戶的時候可以指定用戶的密碼,但是這個密碼必須是加密的密碼才行,這個時候就可以使用openssl來生成一個。
其實就是利用哈希算法來給密碼生成一個摘要值
openssl passwd 算法類型 用戶密碼
不指定任何哈希算法選項,那么默認使用的是傳統(tǒng)的UNIX crypt() 方法,比 MD5 還老
算法類型說明:
? -6:表示采用sha512這種加密算,也會默認使用隨機的鹽
? -5:sha256算法,也會默認使用隨機的鹽
? -1:md5算法,會默認生成一個隨機的鹽來與密碼一起哈希
這三種都是UNIX密碼哈希方案的一部分
例如:
useradd bob -m -s /bin/bash -p $(openssl passwd -6 redhat)
使用useradd創(chuàng)建用戶的時候,如果沒指定相關屬性,會默認使用 /etc/default/useradd中定義的屬性信息。
生成隨機數(shù)
opensslrand顯示格式(主要有hex和base64) 輸出的隨機字節(jié)數(shù)量
例如:生成16個隨機字節(jié)并以十六進制格式輸出
opensslrand-hex16
說明:一個十六機制數(shù)由4個二進制數(shù)組成,一個字節(jié)8位,所以一個十六進制數(shù)等于兩個字節(jié)??偣矔敵鋈€字符
例如:以base64編碼形式顯示隨機數(shù)
opensslrand-base6416
base64編碼介紹
base64是一種用64個字符來表示任意二進制數(shù)據(jù)的方法。在一些早期的協(xié)議中,例如smtp、http。他們只設計了ASCII字符數(shù)據(jù)的傳輸,當需要包含非ASCII字符或者二進制數(shù)據(jù)時就會出問題,因為雖然二進制數(shù)據(jù)都是由于0和1組成,但是難點在于如何表示和傳輸這些0和1。
這個時候使用base64編碼完美解決問題,將二進制數(shù)據(jù)轉為一個僅由ASCII字符組成的安全字符串,這樣可以避免由于二進制數(shù)據(jù)的傳輸而導致的任何解釋或傳輸問題
編碼原理
1. 先將要三個字節(jié)的二進制數(shù)據(jù)(一共24位),重新分為4組,每組6位。(每6位就可以表示一個值,范圍從0到63)
2. 然后將每個6位的數(shù)據(jù)(一個組)轉換為十進制數(shù)字,然后根據(jù)base64的字符集得到相應的字符。
3. 再重復這個過程直到所有的輸入數(shù)據(jù)都被處理完
4. 如果原始數(shù)據(jù)(即待編碼的數(shù)據(jù))的長度不是3個字節(jié)的整數(shù)倍(base64將每3個字節(jié)作為一個單元來處理),會添加填充字符,即=,來使其長度滿足要求。這就是看到等號的原因
鏈接:https://www.cnblogs.com/heyongshen/p/17787948.html
-
Linux
+關注
關注
87文章
11496瀏覽量
213224 -
網(wǎng)絡
+關注
關注
14文章
7795瀏覽量
90617 -
傳輸層
+關注
關注
0文章
31瀏覽量
11062
原文標題:OpenSSL完全指南:Linux系統(tǒng)安全通信的終極武器
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
嵌入式學習-ElfBoard ELF 1板卡-移植openssl
openssl移植到arm-linux全過程相關資料分享
openssl有哪些應用呢
介紹移植openssl庫到嵌入式設備中的具體方法
Openssl嵌入式arm移植筆記分享,絕對實用
交叉編譯openssl時出現(xiàn)找不到編譯器的問題怎么辦
OpenSSL在電子商務安全中的應用
如何才能使用OpenSSL實現(xiàn)一個基本的安全連接的詳細概述

密碼學OpenSSL的入門基礎知識整理合集

嵌入式Linux系統(tǒng)openssl庫移植

評論