SSL協議入門以及openssl的簡單使用

初識ssl協議, openssl的簡單應用(建議PC瀏覽器打開)

----SSL篇----

SSL TLS個人理解:

1.SSL是一種加密協議(安全套接字層), 實現在第四層的TCP/IP協議之上, 對上層協議透明, 應用層(會話層, 表示層, 應用層)在接收或傳輸數據的時(數據加密解密, 通信秘鑰的協商), 不會對ssl有任何感知

2.TLS是在SSL協議之上更加標準化的一種數據加密傳輸協議, 由ISOC組織接替Netscape(網景)在SSL協議基礎之上改進而來

3.SSL已退役, 我們現在所說的SSL就是TLS

4.與HTTP協議一樣, SSL同樣是一種標準, 是一種具體的概念, 而ssl的實現為openssl, openssl是C語言開發的開源軟件, 開發者可以使用openssl生成用於支持SSL協議通訊的相關文件

HTTPS協議:

架構在ssl協議之上的HTTP協議

證書:

(摘自百度百科)包括電子簽證機關的信息、公鑰用戶信息、公鑰、權威機構的簽字和有效期等等。目前,證書的格式和驗證方法普遍遵循X.509 國際標準。

SSL協議秘鑰協商過程:

<code>----定義----
S : 服務端 S的證書中的公鑰對外公開, S上存有SSL公鑰證書與對應的KEY
C : 客戶端
CA: 證書籤證機構, 上帝視角的第三方公證, 用戶把生成的CSR(下文中有對CSR的解釋)
文件提交給CA後, CA用它的私鑰對CSR進行簽名之後, 生成的產物就是用戶的證書,
CA類機構的本身也有證書, 它的證書會被更高等級的認證機構簽名, 反覆循環, 一
直到最後, 會存在一個自簽名的根證書, 形成一條公鑰認證鏈

----過程----
1. C 發送hello請求告知 S 它所支持的加密算法, 支持的ssl版本並附帶一個隨機數(生成秘鑰用),
S 確認後, 選擇加密算法其中一種,也生成一個隨機數(生成秘鑰用), 把隨機數信息附帶 S 的證書回傳給 C
2. C 使用 CA (證書認證機構)的公鑰解密 S 的證書(根據服務器的信息以及域名信息, 得到 S 的證書內信息,
即: 解密成功),解密後的證書信息如果與 S 公開的信息相匹配, 則 C 信任 S
3. C 生成一個隨機數(生成秘鑰用), 本次的隨機數使用 S 的公鑰對做加密,防止信息洩露, 附帶前幾次的通訊
報文所產生HASH發送給 S , S使用本地存儲的KEY(私鑰)解密被C加密的隨機數(這個隨機數是通過一種算法生成的,

不展開討論, 感興趣可以搜索相關資料 PreMaster Key), S驗證數據的準確性, 隨後切換到與客戶端相同的加密套件,
通知C後秘鑰協商結束, 開始進行信息交互
/<code>

秘鑰協商得到的最終產物:

1.C單方面信任S (如果有需要, 也可以驗證C, 比如銀行系統的KEY寶)
2.C保存了秘鑰 (保證信息傳輸的保密性, 完整性)
3.S保存了秘鑰 (保證信息傳輸的保密性, 完整性)
4.早期的SSL協商過程中不存在隨機數, 會在第三步的時候, 由客戶端C生成對稱秘鑰, 使用公鑰加密發給服務端S

----openssl篇----

使用以下後綴名結尾文件說明:

.key: 秘鑰原始文件(私鑰)

.csr: 證書籤名請求文件 (裡面包含了申請者(你)的用戶信息, 公鑰信息, 域名信息等, 可以把該文件交給權威認證機構, 比如賽門鐵克, 認證機構使用機構自己的公鑰對你的csr文件做簽名, 得到的就是你的證書文件)

.cer: 證書文件(公鑰), 常見於windows

.crt: 證書文件(公鑰), 常見於linux或unix或二者的子分支系統下

.pem: 還是證書文件(公鑰), 以pem標準編碼(開發常見)

.der: 依舊是證書文件(公鑰), der標準的二進制格式證書(不常用)

上述總結: 一共有三種類型的文件, 1: 私鑰(KEY) 2.csr(簽名請求, 蘋果開發的兄弟應該很熟悉) 3.其餘的都是證書, 證書內有申請者的公鑰和其他信息(用戶信息, 域名)

pfx/p12: 用於存放 證書(公鑰) + 私鑰,這種文件通常包含保護密碼,2進制方式存儲

使用openssl生成ssl相關文件

1.生成一個key和csr文件, 輸入以下命令, 按提示輸入表單信息
注意: 其中 Common Name 屬性, 要填你域名, exp: www.gomyck.com

<code>$ openssl req -new -nodes -newkey rsa:2048 -keyout demo.key -out demo.csr
/<code>

2.如果生成時候輸入了密碼。可以使用導出命令導出無密碼的秘鑰:

<code>$ mv demo.key temp.key 
$ openssl rsa -in temp.key -out demo.key
$ rm temp.key/<code>

3.這裡申請者把自己本身當做CA, 為自己頒發證書文件(大部分第三方機構是要給錢的, 賽門鐵克有免費的證書, 最高期限是1年)

證書請求文件(csr)私鑰(key) 生成 cer| crt 證書(CA自簽名證書, 即根證書), 365是證書有效期

<code>$ openssl x509 -req -days 365 -in demo.csr -signkey demo.key -out demo.cer/<code>
<code>$ openssl x509 -req -days 365 -in demo.csr -signkey demo.key -out demo.crt/<code>

當前輸出產物:

demo.key (私鑰, 保管好)
demo.cer || demo.crt (公鑰, 對外暴露)
demo.crt (證書請求文件, 自簽名或提交CA使用)

應用服務器可以使用的文件: demo.key demo.cer|demo.crt

因為當前的證書文件是使用的自己的私鑰簽名, 所以在性質上, 屬於根證書狀態, 如下圖:

被瀏覽器信任的證書:

SSL協議入門以及openssl的簡單使用

自簽名的證書:

SSL協議入門以及openssl的簡單使用

未受信任的證書在訪問時, 瀏覽器會提示你有風險, 需要用戶手動確認

注意圖一上被信任的證書, 其上面是有一條證書鏈的, 頂級根證書是權威認證機構(如果它的私鑰洩露或被破解, 會對整個公鑰鏈造成信息安全問題)

可以看到自制的簽名證書(圖二), 是顯示不被信任的(根證書信任與否在瀏覽器上內置, 被信任的機構名單以及該機構的證書在瀏覽器內置, 客戶的證書因為被受信任的證書籤過名, 所以在認證時, 按照公鑰鏈和簽名鏈, 來一層層向上驗證, 最終被信任)

openssl的一點點命令(openssl實在太強大, 學不動)

生成.pem文件:
<code>$ openssl rsa -in demo.key -out demo.pem   
$ openssl x509 -in demo.crt -out demo.pem /<code>
從pxf文件中提取pem(PFX轉X509) :
<code>$ openssl pkcs12 -in demo.pfx -out demo.pem -nodes
#從pfx提取的key包含公鑰也包含私鑰, 所以需要單獨提取
$ openssl pkcs12 -in demo.pfx -out all.key -nocerts -nodes
$ openssl rsa -in all.key -out demo_private.key
$ openssl rsa -in all.key -pubout -out demo_public.key/<code>
pem文件分別生成key和證書:
<code>$ openssl rsa -in demo.pem -out demo.key
$ openssl x509 -in demo.pem -out demo.crt /<code>
生成pfx文件命令(X509轉PFX):
<code>$ openssl pkcs12 -export -out demo.pfx -inkey demo.key -in demo.crt -certfile demo.crt
$ openssl pkcs12 -export -out demo.pfx -inkey demo.key -in demo.cer -certfile demo.cer
/<code>
p12格式轉成pem
<code>$ openssl pkcs12 -clcerts -nokeys -out demo.pem -in demo.p12
$ openssl pkcs12 -nocerts -out demo.pem -in demo.p12
/<code>
pem格式轉成p12
<code>$ openssl pkcs12 -export -inkey demo.key -in demo.pem -out demo.p12/<code>

個人博客 點擊前往


分享到:


相關文章: