閱讀目錄算法
一:什麼是openssl? 它的做用是?應用場景是什麼?瀏覽器
即百度百科說:openssl是一個開放源代碼的軟件庫包,應用程序可使用這個包來進行安全通訊,它能夠避免信息被竊聽到。安全
SSL是Secure Sockets Layer(安全套接層協議)的縮寫,能夠在Internet上提供祕密性傳輸。Netscape(網景)公司在推出第一個Web瀏覽器的同時,提出了SSL協議標準。其目標是保證兩個應用間通訊的保密性和可靠性,可在服務器端和用戶端同時實現支持。服務器
由於在網絡傳輸的過程當中,網絡的數據確定要通過wifi路由器對吧,那麼咱們經過路由器作些手腳咱們就能夠拿到數據,所以openssl的做用就是避免信息被竊聽到。網絡
那麼openssl是如何保證信息不被竊聽到呢?所以咱們須要瞭解 非對稱加密、數字簽名、數字證書等一些基本概念的。工具
1.1 什麼是非對稱加密?網站
非對稱加密是用密鑰對數據進行加密,而後咱們可使用另外一個不一樣的密鑰對數據進行解密。這兩個密鑰就是公鑰和私鑰。加密
咱們根據私鑰能夠計算出公鑰,可是咱們根據公鑰計算不出來私鑰的。私鑰通常是有服務器掌握的,公鑰則是在客戶端使用的。spa
注意:非對稱加密的具體算法咱們這邊不作研究。開放源代碼
1.2 什麼是數字簽名?
根據百度百科說:數字簽名(又能夠叫公鑰數字簽名)是一種相似寫在紙上的普通的物理簽名,可是使用了公鑰加密領域的技術實現,它是用於鑑別數字信息的方法。數字簽名有兩種互補的運算,一個是用於簽名,另外一個是用於驗證。
做用是:它會將報文使用必定的HASH算法算出一個固定位數的摘要信息,而後使用私鑰將摘要加密,而後會將剛纔的報文一塊兒發送給接收者,接收者會經過公鑰將摘要解出來。也經過hash算法算出報文摘要,若是兩個摘要一致,說明數據未被篡改,說明數據是完整的。
1.3 什麼是數字證書?
根據百度百科說:數字證書是互聯網通信中標誌通信各方身份信息一串數字。提供了一種在Internet上驗證通訊實體身份的方式。
它是由CA頒發給網站的一種身份的方式。它裏面包含了該網站的公鑰、有效時間、網站的地址、及 CA的數字簽名等。
做用是:它是使用CA的私鑰將網站的公鑰等信息進行了簽名,當客戶端請求服務器端的時候,網站會把證書發給客戶端,客戶端先經過CA的數字簽名校驗CA的身份,來證實證書的真實完整性。
瞭解到上面的非對稱加密、數字簽名、數字證書的概念以後,咱們來看看它是如何來保證數據沒有被僞造的:
SSL 實現認證用戶和服務器
如今咱們來想一個問題,若是咱們如今訪問咱們的博客園網站,咱們怎麼知道訪問的是真博客園仍是假博客園呢?爲了肯定咱們的博客園網站的服務器有沒有被僞造,在SSL中有這麼一個規則:假如咱們向服務器發出請求後,服務器必須返回它的數字證書給接收者,當咱們拿到數字證書以後,咱們能夠根據裏面的ca數字簽名,來檢驗數字證書的合法性。假如咱們如今可以證實數字證書是博客園的,可是不表明發送給咱們證書的服務器就是博客園的呢?爲了解決這個問題,其實在咱們拿到的證書裏面會帶有博客園的公鑰,在以後的通訊中,客戶端會使用該公鑰加密數據給博客園服務器,博客園服務器必須使用私鑰纔可以解出裏面的數據。只要他可以解出數據出來,說明他是合法的,不然的話,是僞造的。若是是僞造的,那麼就不能通信。所以SSL就解決了服務器認證的問題了。
加密數據在通信過程當中如何防止數據不被竊取呢?
客戶端第一次給服務器發送請求的時候(拿到證書以前的那個請求),會在請求裏面放一個隨機數(好比叫A),服務器的返回證書的響應裏也會帶一個隨機數(好比叫B), 客戶端拿到證書後,會使用公鑰加密一個隨機數(好比叫C)發送給服務器,所以客戶端,服務器就有三個隨機數:A、B、C。雙方使用這些隨機數和一個相同的算法會生成一個密鑰,之後全部的通訊都使用這個對稱密鑰來進行的。
通常狀況下,這三個密鑰不可能同時被泄露的,由於它是由三個隨機數隨機生成的。而且其中一個隨機數使用了公鑰加密的。所以是經過這種方式來保證數據不被竊取的。
上面都是在網上看到的一些概念性問題,簡單的理解下就行了,知道是這麼個概念就好了,而咱們的openssl是SSL的實現版。所以openssl的做用避免信息被竊取到,它是經過上面的知識點來作到的。
openssl的應用場景:
在使用http網站中,咱們常常看到網站會有一些廣告什麼的,這些廣告其實不是網站本身放上去的,而是中間的運營商在中間篡改了內容致使的。如今咱們可使用https技術(基於openssl)來對數據進行加密的。它能保證數據不被篡改。
二:使用openssl生成免費證書
1 使用openssl工具生成一個RSA私鑰
使用命令:
openssl genrsa -des3 -out server.key 2048
如上:des3 是算法,2048位強度(爲了保密性)。 server.key 是密鑰文件名 -out的含義是:指生成文件的路徑和名稱。
以下所示:
咱們查看剛剛生成的私鑰。使用命令以下:
openssl rsa -text -in server.key
以下圖所示:
繼續查看 server.key 使用命令:cat server.key, 以下圖所示:
2. 建立證書籤名請求CSR文件
使用命令以下:
openssl req -new -key server.key -out server.csr
-key的含義是:指定ca私鑰
-out的含義是: server.csr 生成證書文件
以下所示:
運行如上命令後,生成CSR時會要求填入如下信息:
Country Name (2 letter code) []:CN // 輸入國家代碼,中國填寫 CN State or Province Name (full name) []:HangZhou // 輸入省份,這裏填寫 HangZhou Locality Name (eg, city) []:HangZhou // 輸入城市,咱們這裏也填寫 HangZhou Organization Name (eg, company) []:tbj // 輸入組織機構(或公司名,我這裏隨便寫個tbj) Organizational Unit Name (eg, section) []:tbj // 輸入機構部門 Common Name (eg, fully qualified host name) []:*.abc.com // 輸入域名,我這邊是 (*.abc.com) Email Address []:tugenhua0707@qq.com // 你的郵箱地址 Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:123456 // 你的證書密碼,若是不想設置密碼,能夠直接回車
如上操做後,會在當前目錄下生成如下兩個文件:
server.key server.csr
以下圖所示:
查看csr文件以下命令:
openssl req -text -in server.csr -noout
以下圖所示:
3. 生成CA證書
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
x509的含義: 指定格式
-in的含義: 指定請求文件
-signkey的含義: 自簽名
以下圖所示:
注意:如上server.crt 是證書持有人的信息,持有人的公鑰,以及簽署者的簽名等信息。
4. 生成客戶端證書
生成客戶端證書與生成CA證書類似。
4.1. 先要生成私鑰
使用命令:
openssl genrsa -out client.key 2048
以下圖所示:
4.2 生成請求文件
使用命令:
openssl req -new -key client.key -out client.csr
以下圖所示:
4.3 發給ca簽名
使用命令:
openssl x509 -req -days 365 -in client.csr -signkey client.key -out client.crt
以下圖所示: