互聯網造成的初期,更多關注的是設備之間經過網絡相互訪問功能的實現,咱們都知道,兩個設備之間要想相互通訊,就必需遵循某種協議,因而早期的互聯網也出現來衆多的協議,好比傳輸層最著名的協議就是tcp和udp,而應用層比較著名的協議有:http、ftp、pop、smtp、dns、telnet等等,而這些協議這開發初期,更可能是關注功能的實現,數據這網絡上傳輸是明文方式的,不多關注兩個設備之間相互通訊的安全性問題,而隨着互聯網不斷的高速發展,已經深刻到社會的各行各業,無時無刻不在影響着人們的生活,對於一些安全性要求較高的行業,迫切的須要一種安全協議,以保重數據傳輸的安全性,因而就有來咱們今天要談的OpenSSL。算法
在說OpenSSL以前,首先讓咱們認識一下SSL,其實SSL是Secure Socket Layer的簡寫,也就是所謂的安全套接字層協議,以及其繼任者TLS(Transport Layer Security,傳輸層安全)是爲網絡通訊提供安全及數據完整性的一種安全協議,TLS和SSL都是在傳輸層對網絡進行加密,說到加密就不得不說一下加密的種類,常見的加密種類有:瀏覽器
1)對稱加密:加密和解密使用同一個密碼,它是將明文分隔成固定大小的塊,而後逐個進行加密。安全
2)公鑰加密:也叫非對稱加密,爲何叫非對稱加密那,是由於它是成對兒出現的,公鑰是從私鑰中提取而來,使用公鑰加密只能使用與此公鑰配對兒的私鑰解密,也就是所使用公鑰加密必需要有一對兒密鑰:私鑰(secret key)、公鑰(public key);公鑰加密經常使用於身份認證、密鑰交換、數據加密。服務器
3)單項加密:提取數據的特徵碼,因爲具備定長輸出、雪崩效應、不可逆的特性,經常使用於驗證數據完整性使用。網絡
SSL協議主要提供如下服務:架構
1)認證用戶和服務器,確保數據發送到正確的客戶機和服務器;
2)加密數據以防止數據中途被竊取;
3)維護數據的完整性,確保數據在傳輸過程當中不被改變。運維
有了以上SSL的認識以後,那麼一次加密的通信過程是怎麼樣的呢?咱們大體能夠這樣理解,首先從發送方來說:tcp
1)發送方會使用單項加密算法提取生成數據的特徵碼ide
2)而後使用本身的私鑰加密特徵碼附加到數據後面工具
3)生成用於對稱加密的臨時密鑰
4)用此臨時密鑰加密數據和已經使用私鑰加密後的特徵碼
5)使用接收方的公鑰加密此臨時密鑰,附加在對稱加密後的數據後方
而後從接收方來說:
1)使用本身的私鑰解密加密的臨時密鑰;從而得到對稱密鑰;
2)使用對稱密鑰解密對稱加密的 數據和私鑰加密的特徵碼密文;從而得到數據和特徵碼密文;
3)使用發送方的公鑰解密特徵碼密文,從而得到從計算生成的特徵碼;
4)使用與對方一樣的單向加密算法計算數據的特徵碼,並與解密而來的進行比較;
從以上的介紹中咱們能夠簡單的瞭解到一次加密的通信過程的大體步驟,可是實際的網絡通信中遠不止這些,實際的網絡通信架構中主要有C/S(客戶端/服務器)架構和B/S(瀏覽器/客戶端)兩種架構,就拿最常使用的Web服務來講,Web服務使用B/S(瀏覽器/客戶端)架構並且使用TCP這種可靠的有鏈接的協議,衆多的瀏覽器用戶如何去驗證一個網站確實是它聲稱的這個網站那,這裏就牽涉到一個數字簽名和數字證書的問題了,我想每個初學者都會產生這樣一個疑問,什麼是數字證書,什麼又是數字簽名?數字證書是由權威機構--CA證書受權(Certificate Authority)中心發行的,能提供在Internet上進行身份驗證的一種權威性電子文檔,人們能夠在互聯網交往中用它來證實本身的身份和識別對方的身份。
數字簽名(又稱公鑰數字簽名、電子簽章)是一種相似寫在紙上的普通的物理簽名,可是使用了公鑰加密領域的技術實現,用於鑑別數字信息的方法。一套數字簽名一般定義兩種互補的運算,一個用於簽名,另外一個用於驗證。要想弄明白這個問題,能夠參考這個網http://netsecurity.51cto.com/art/201108/287971.htm 這裏圖文並茂的解釋了數字簽名和數字證書的做用,其實把數字簽名想象爲現實中咱們本身的簽名,把數字證書想象成咱們每一個人的×××,這樣就更能幫助咱們理解什麼是數字簽名以及什麼是數字證書,就比如咱們每一個人均可以本身簽名,可是每一個人也必須有一張屬於本身的×××同樣(固然個別神通廣大的人會擁有多張×××的人再也不咱們的討論範圍內)。
說了這麼多,讓咱們來看看數字正常的格式是什麼以下圖:
有了以上的基礎認識,對於咱們理解和使用OpenSSL來說有着很是重要的做用,OpenSSL 是一個強大的安全套接字層密碼庫,Apache使用它加密HTTPS,OpenSSH使用它加密SSH,可是,你不該該只將其做爲一個庫來使用,它仍是一個多用途的、跨平臺的密碼工具包括了主要的密碼算法、經常使用的密鑰和證書封裝管理功能及SSL協議,並提供豐富的應用程序供測試或其它目的使用。
要想更好的使用OpenSSL先來認識一下OpenSSL的命令
前面曾提到OpenSSL是一個多用途的、跨平臺的密碼工具,那個OpenSSL如何對一個普通文件進行加解密、生成密碼、生成隨機數、生成私鑰那?
加密和解密:
openssl enc -e -CIPHERNAME -a -salt -in /PATH/FROM/SOMEFILE -out /PATH/TO/SOMECIPHERFILE
openssl enc -d -CIPHERNAME -a -salt -in /PATH/FROM/SOMECIPHERFILE -out /PATH/TO/SOMEFILE
enc是openssl的一個子命令,
-e表示加密
-d表示解密
-CIPHERNAME表示指明用那種算法進行加密
-salt表示隨機添加一段雜質
-in表示指明對那個文件進行加密
-out表示指明加密後輸出文件的路徑即名稱
單項加密:
openssl dgst -CIPHER /PATH/TO/SOMEFILE
dgst是openssl的一個單項加密子命令
– CIPHER表示指明加密算法
生成密碼:
openssl passwd -1 -salt NUM
生成隨機數:
openssl rand -hex|-base64 NUM
-hex表示以十六進制編碼格式輸出
-base64表示文本編碼格式輸出
生成私鑰:
openssl genrsa -out /PATH/TO/PRIVATE_KEYFILE NUM_BITS
genrsa是openssl命令生成私鑰的一個子命令
-out /PATH/TO/PRIVATE_KEYFILE 指明生成的私鑰輸出位置以及名稱
NUM_BITS指明生成私鑰的位數
從私鑰中提取公鑰:
openss l rsa -in /PATH/FROM/PRIVATE_KEY_FILE -pubout
rsa是openssl命令提取公鑰的一個子命令
-in /PATH/FROM/PRIVATE_KEY_FILE指明從哪一個私鑰中提取
-pubout指明提取的公鑰的名稱
從以上能夠看出openssl的強大功能,可是衆所周知數字證書是由權威機構--CA證書受權(Certificate Authority)中心發行的,那麼如何構建咱們本身的私有CA那,openssl一樣能夠作到,首先來看構建私有CA的步驟:
1、生成私鑰文件
2、生成自簽證書
3、提供輔助文件
touch /etc/pki/CA/index.txt
echo 01 > /etc/pki/CA/serial
到此咱們的私有CA已經創建完畢,可是創建私有CA的主要做用就是給各個節點發證書,這裏咱們在本機來模擬節點申請證書,節點申請證書須要以下步驟:
1、生成私鑰
2、生成證書籤署請求
3、把請求發送給咱們創建的私有CA
因爲我在本機請求,因此直接copy過去就能夠
到此咱們的節點申請證書的請求以及請求完畢,這時就須要私有CA爲這個節點申請的證書作簽發證書,CA簽發證書一樣也有三個步驟:
1、驗證請求者的信息
2、簽發證書
3、把簽發好是證書發還給請求者
這時咱們已經正常簽署了該節點的證書請求,該證書已經能夠正常使用了。
以上說了這麼多CA的相關信息,那CA證書到底有什麼做用那?
1、驗證網站是否可信(針對HTTPS)有了證書以後,當你的瀏覽器在訪問某個 HTTPS 網站時,會驗證該站點上的 CA 證書(相似於驗證介紹信的公章)。若是瀏覽器發現該證書沒有問題(證書被某個根證書信任、證書上綁定的域名和該網站的域名一致、證書沒有過時),那麼頁面就直接打開;不然的話,瀏覽器會給出一個警告,告訴你該網站的證書存在某某問題,是否繼續訪問該站點
大多數知名的網站,若是用了 HTTPS 協議,其證書都是可信的(也就不會出現上述警告)。因此,從此你若是上某個知名網站,發現瀏覽器跳出上述警告,你就要當心啦!
2、驗證某文件是否可信(是否被篡改)
證書除了能夠用來驗證某個網站,還能夠用來驗證某個文件是否被篡改。具體是經過證書來製做文件的數字簽名。
隨着互聯網愈來愈深刻的發展,網絡的安全性愈來愈受到重視,掌握好OpenSSL的使用也將考驗每一個運維工程師的所必備的技能。