為你的網絡傳輸加把鎖(OpenSSL)

互聯網形成的初期,更多關注的是設備之間通過網絡相互訪問功能的實現,我們都知道,兩個設備之間要想相互通信,就必需遵循某種協議,于是早期的互聯網也出現來眾多的協議,比如傳輸層最著名的協議就是tcpudp,而應用層比較著名的協議有:http、ftp、pop、smtpdns、telnet等等,而這些協議這開發初期,更多是關注功能的實現,數據這網絡上傳輸是明文方式的,很少關注兩個設備之間相互通信的安全性問題,而隨著互聯網不斷的高速發展,已經深入到社會的各行各業,無時無刻不在影響著人們的生活,對于一些安全性要求較高的行業,迫切的需要一種安全協議,以保重數據傳輸的安全性,于是就有來我們今天要談的OpenSSL

在說OpenSSL之前,首先讓我們認識一下SSL,其實SSLSecure Socket Layer的簡寫,也就是所謂的安全套接字層協議,以及其繼任者TLSTransport Layer Security,傳輸層安全)是為網絡通信提供安全及數據完整性的一種安全協議,TLSSSL都是在傳輸層對網絡進行加密,說到加密就不得不說一下加密的種類,常見的加密種類有:

1)對稱加密:加密和解密使用同一個密碼,它是將明文分隔成固定大小的塊,然后逐個進行加密。

2)公鑰加密:也叫非對稱加密,為什么叫非對稱加密那,是因為它是成對兒出現的,公鑰是從私鑰中提取而來,使用公鑰加密只能使用與此公鑰配對兒的私鑰解密,也就是所使用公鑰加密必須要有一對兒密鑰:私鑰(secret key)、公鑰(public key);公鑰加密常用于身份認證、密鑰交換、數據加密。

3)單項加密:提取數據的特征碼,由于具有定長輸出、雪崩效應、不可逆的特性,常用于驗證數據完整性使用。

SSL協議主要提供以下服務:

1)認證用戶和服務器,確保數據發送到正確的客戶機和服務器;
  2)加密數據以防止數據中途被竊?。?/span>
  3)維護數據的完整性,確保數據在傳輸過程中不被改變。

有了以上SSL的認識之后,那么一次加密的通訊過程是怎么樣的呢?我們大致可以這樣理解,首先從發送方來講:

1)發送方會使用單項加密算法提取生成數據的特征碼

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 這里圖文并茂的解釋了數字簽名和數字證書的作用,其實把數字簽名想象為現實中我們自己的簽名,把數字證書想象成我們每個人的身份證,這樣就更能幫助我們理解什么是數字簽名以及什么是數字證書,就好比我們每個人都可以自己簽名,但是每個人也必須有一張屬于自己的身份證一樣(當然個別神通廣大的人會擁有多張身份證的人不再我們的討論范圍內)。

說了這么多,讓我們來看看數字正常的格式是什么如下圖:

數字證書格式.jpg

有了以上的基礎認識,對于我們理解和使用OpenSSL來講有著非常重要的作用,OpenSSL 是一個強大的安全套接字層密碼庫,Apache使用它加密HTTPS,OpenSSH使用它加密SSH,但是,你不應該只將其作為一個庫來使用,它還是一個多用途的、跨平臺的密碼工具包括了主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協議,并提供豐富的應用程序供測試或其它目的使用。

要想更好的使用OpenSSL先來認識一下OpenSSL的命令

命令.jpg

前面曾提到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

encopenssl的一個子命令,

-e表示加密

-d表示解密

-CIPHERNAME表示指明用那種算法進行加密

-salt表示隨機添加一段雜質

-in表示指明對那個文件進行加密

-out表示指明加密后輸出文件的路徑即名稱

單項加密:

openssl  dgst   -CIPHER  /PATH/TO/SOMEFILE

dgstopenssl的一個單項加密子命令

– CIPHER表示指明加密算法

生成密碼:

openssl  passwd  -1  -salt  NUM

生成隨機數:

openssl   rand  -hex|-base64  NUM

-hex表示以十六進制編碼格式輸出

-base64表示文本編碼格式輸出

生成私鑰:

openssl   genrsa  -out  /PATH/TO/PRIVATE_KEYFILE  NUM_BITS

genrsaopenssl命令生成私鑰的一個子命令

-out  /PATH/TO/PRIVATE_KEYFILE 指明生成的私鑰輸出位置以及名稱

NUM_BITS指明生成私鑰的位數

從私鑰中提取公鑰:

openss l  rsa  -in  /PATH/FROM/PRIVATE_KEY_FILE  -pubout

rsaopenssl命令提取公鑰的一個子命令

-in  /PATH/FROM/PRIVATE_KEY_FILE指明從哪個私鑰中提取

-pubout指明提取的公鑰的名稱

 

從以上可以看出openssl的強大功能,但是眾所周知數字證書是由權威機構--CA證書授權(Certificate Authority)中心發行的,那么如何構建我們自己的私有CA那,openssl同樣可以做到,首先來看構建私有CA的步驟:

1、生成私鑰文件

生成私鑰.jpg

2、生成自簽證書

自簽證書1.jpg

3、提供輔助文件

touch /etc/pki/CA/index.txt

echo 01 > /etc/pki/CA/serial

到此我們的私有CA已經建立完畢,但是建立私有CA的主要作用就是給各個節點發證書,這里我們在本機來模擬節點申請證書,節點申請證書需要如下步驟:

1、生成私鑰

私鑰證書.jpg

2、生成證書簽署請求

證書簽署請求.jpg

3、把請求發送給我們建立的私有CA

由于我在本機請求,所以直接copy過去就可以

到此我們的節點申請證書的請求以及請求完畢,這時就需要私有CA為這個節點申請的證書做簽發證書,CA簽發證書同樣也有三個步驟:

1、驗證請求者的信息

2、簽發證書簽署證書.jpg

3、把簽發好是證書發還給請求者

這時我們已經正常簽署了該節點的證書請求,該證書已經可以正常使用了。

 

以上說了這么多CA的相關信息,那CA證書到底有什么作用那?

1、驗證網站是否可信(針對HTTPS)有了證書之后,當你的瀏覽器在訪問某個 HTTPS 網站時,會驗證該站點上的 CA 證書(類似于驗證介紹信的公章)。如果瀏覽器發現該證書沒有問題(證書被某個根證書信任、證書上綁定的域名和該網站的域名一致、證書沒有過期),那么頁面就直接打開;否則的話,瀏覽器會給出一個警告,告訴你該網站的證書存在某某問題,是否繼續訪問該站點

大多數知名的網站,如果用了 HTTPS 協議,其證書都是可信的(也就不會出現上述警告)。所以,今后你如果上某個知名網站,發現瀏覽器跳出上述警告,你就要小心啦!

2、驗證某文件是否可信(是否被篡改)

證書除了可以用來驗證某個網站,還可以用來驗證某個文件是否被篡改。具體是通過證書來制作文件的數字簽名。

 


隨著互聯網越來越深入的發展,網絡的安全性越來越受到重視,掌握好OpenSSL的使用也將考驗每個運維工程師的所必備的技能。

 

原創文章,作者:zhang,如若轉載,請注明出處:http://www.www58058.com/9567

(0)
zhangzhang
上一篇 2015-12-06
下一篇 2015-12-06

相關推薦

  • linux基礎學習(數組、字符串變量處理)

    2016-08-22 授課內容: 數組 高級字符串操作 一、數組   變量:存儲單個元素的內存空間   數組:存儲多個元素的連續的內存空間,相當于多個變量的集合。   數組名和索引   索引:編號從0開始,屬于數值索引   bash的數組支持稀疏格式(索引不連續)   …

    Linux干貨 2016-08-24
  • M25初嘗試部署RAID磁盤陣列組

    在學習了linux系統管理硬盤設備的基礎后,現在嘗試部署RAID10硬盤組技術,在部署前我們先了解一下什么叫“RAID”磁盤冗余陣列(Redundant Array of Independent Disks)。 RAID技術就是把多塊硬盤設備組合成一個容量更大、更安全的硬盤組,可以把數據切割成多個區段后分別存在各個不同物理硬盤設備上,然后利用分散讀寫需求賴提…

    2017-07-12
  • 2018近期it運維大會合集,這五場值得關注!

    17年,我們不僅看到Google、Facebook、Amazon、LinkedIn、Netflix、Airbnb等互聯網巨頭在與DevOps親密接觸,傳統軟件公司如Adobe、IBM、Microsoft、SAP等,亦或是網絡業務非核心的蘋果、沃爾瑪、索尼影視娛樂、星巴克等都在采用DevOps,更看到了國內一大片企業開始鐘情于此。

    2018-03-01
  • 馬哥教育網絡21期+第二周練習博客

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 常用文件管理類命令有cp、mv、rm。 # cp命令:文件復制命令     cp [OPTION]… [-T] SOURCE DEST 單文件復制     cp [OPTION]… SOURC…

    Linux干貨 2016-07-26
  • Linux基礎-用戶管理相關操作-week 4

    1.復制/etc/skel 目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其他用戶均沒有任何訪問權限  cp /etc/skel /home/tuser1 -rf chmod og=  /home/tuser1 -R 2.編輯/etc/group文件添加組hadoop echo hadoop:x:503 …

    Linux干貨 2016-11-21
欧美性久久久久