SSL在https和MySQL中的原理思考

来源:http://www.cnblogs.com/liulaoshi/archive/2016/08/18/5781991.html
-Advertisement-
Play Games

之前對HTTPS通信過程有過瞭解,HTTPS是應用HTTP協議使用SSL加密的版本,在TCP和HTTP之間增加SSL協議。通過握手階段認證雙方身份,協商對稱秘鑰對通信信息進行加密。此處只描述常用的伺服器單向驗證,大致過程簡要描述如下: 0:事先Web伺服器把自己的公鑰和Web信息提交給權威CA,CA ...


之前對HTTPS通信過程有過瞭解,HTTPS是應用HTTP協議使用SSL加密的版本,在TCP和HTTP之間增加SSL協議。通過握手階段認證雙方身份,協商對稱秘鑰對通信信息進行加密。此處只描述常用的伺服器單向驗證,大致過程簡要描述如下:

0:事先Web伺服器把自己的公鑰和Web信息提交給權威CA,CA確認後,用自己的私鑰將Web信息以及公鑰的文摘簽名,製成數字證書交給Web伺服器;
客戶端Web瀏覽器事先安裝被信任的權威CA的根證書(未簽名證書或者自簽名證書)
1:客戶端向伺服器發起連接請求,協商使用的SSL版本、非對稱加密演算法、對稱加密演算法以及摘要生成演算法,雙方達成共識
2:Web伺服器向客戶端發送自己的數字證書,客戶端用CA的根證書解密,證明Web伺服器身份真實,同時證明伺服器公鑰正確
3:客戶端用伺服器公鑰加密一個隨機數,作為通信收發數據的對稱秘鑰,發送給伺服器
4:伺服器用自己的私鑰解密,拿到對稱秘鑰,返回ACK
5:客戶端和伺服器使用對稱秘鑰開始通信

 

到學習MySQL的SSL連接配置時產生一個疑問,HTTPS有CA作為可信第三方,負責確認伺服器身份,而MySQL連接通信只2方,沒聽說還有個CA從中協調啊,那還怎麼SSL啊?

通過網上查資料,發現自己對SSL相關的很多概念理解不是很準確,對之前CA的驗證方式理解不對。首先明確一些概念:

公私鑰對:非對稱加密演算法,公鑰和私鑰成對出現,用公鑰加密用私鑰解密,用私鑰加密用公鑰解密

CA:證書頒發機構,通信雙方可信的第三方。自己有公私鑰對,網站想證明自己真實可信,但用戶不相信自己,只相信CA說的,於是網站提交自己的信息和公鑰給CA,CA核實網站信息和提交的公鑰,覺得靠譜,於是簽名,製成證書,交給網站成為一個資質。

簽名:別人不知道我的私鑰,但是知道我的公鑰。怎麼證明這文件是我認證的呢?我用自己的私鑰加密,別人用我的公鑰解密成功,那肯定知道是我加密的,別人幹不了。具體一點,先對文本內容計算散列值,然後對這個散列值用自己的私鑰加密。(別人對文本內容計算散列值,然後用我的私鑰解密得到的值做對比,一致證明簽名OK)

證書:包含3部分,通信方具體信息(地點、功能變數名稱、組織、擁有者等)、通信方的公鑰、權威CA的簽名。(具體信息和公鑰計算散列值,然後對這個散列值用自己的私鑰加密)

根證書:權威CA也有自己的證書(畢竟需要CA的公鑰來驗證網站證書真偽),那CA的證書誰簽名啊?畢竟沒有更高一級了,所以根證書是未簽名的或者是自簽名的,沒人給這個證書背書了,所以叫做根,是信任鏈的起點,都可以理解了。

 

再看MySQL的SSL連接配置,思考SSL通信過程,就可以理解為什麼需要這些文件了(此處描述SSL單向驗證模式)

MySQL伺服器端要配置3個文件:ssl-ca.pem, ssl-key.pem, ssl-cert.pem

客戶端連接時需要文件:ssl-ca.pem

ssl-ca.pem就充當了可信的第三方,CA根證書,文件里包含了CA的信息和公鑰,客戶端和伺服器都有。

1.客戶端向MySQL伺服器發起連接請求,雙方協商加密演算法、SSL版本等

2.伺服器向客戶端發來自己的證書(ssl-cert.pem的內容,CA簽名的),客戶端用ssl-ca.pem的公鑰解密,確認伺服器身份和公鑰真實。

3.客戶端產生隨機數作為對稱加密的秘鑰,用伺服器公鑰加密,發送給伺服器

4.伺服器用自己的私鑰(ssl-key.pem)解密,拿到這個隨機數,返回ACK

5.雙方用隨機數做密鑰,以對稱加密方式通信

 

舉一反三,其他應用層協議使用SSL通信時,也是一樣的套路了。如果有哪些地方不准確,請留言指正,感謝。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 序言 打算分享一些有爭議的話題,並且表達一下我的看法。這是該系列的第一篇,我想討論的是:類的成員變數應該如何定義? 在 Objective-C 的語言的早期,類的私有成員變數是只能定義在 .h 的頭文件裡面的。像如下這樣: 之後,蘋果改進了 Objective-C,允許在 .m 裡面添加一個當前類的 ...
  • 簡單幾步操作讓你在終端下用git實現文件的上傳。 一、克隆項目 在工作中,常見的情景都是遠程庫已經建好了,需要大家把代碼拉下來,共同協作開發。本文所有操作均在終端下進行。 //克隆一個本地庫 git clone 你的遠程倉庫地址 二、本地庫的操作 //添加修改 1、git add 修改的文件名 // ...
  • title: Android Button的基本使用 tags: Button,按鈕 Button介紹: Button(按鈕)繼承自TextView,在Android開發中,Button是常用的控制項,用起來也很簡單,你可以在界面xml描述文檔中定義,也可以在程式中創建後加入到界面中,其效果都是一樣的 ...
  • 前言:swift語法基礎篇(二)來了,想學習swift的朋友可以拿去參考哦,有興趣可以相互探討,共同學習哦. 一.可選類型(重點內容) 1.什麼是可選類型? 1.1在OC開發中,如果一個變數暫停不使用,可以賦值為0(基本屬性類型)或者賦值為空(對象類型) 1.2在swift開發中,nil也是一個特殊 ...
  • 在應用圖標右上角添加消息數提醒,可以很方便的告知用戶該應用中有無新消息需要處理。下麵用xcode 7.3.1來簡要說明一下如何用swift語言進行此功能的實現。 1、修改 AppDelegate.swift 2 修改在ViewController.swift 3 編譯運行 第一次會彈出詢問是否允許推 ...
  • Socket 是應用層與 TCP / IP 協議通信的中間軟體抽象層,它是一組介面 TCP:面向連接、傳輸可靠(保證數據正確性,保證數據順序)、用於傳輸大量數據(流模式)、速度慢,建立連接需要開銷較多(時間,系統資源)。 UDP:面向非連接、傳輸不可靠、用於傳輸少量數據(數據包模式)、速度快 常用的 ...
  • 給工程師一個標準的估算項目時間 一個曾經與我一起工作過的經驗豐富的項目經理聲稱,他拿到程式員的時間估算以後,先將它乘以π,然後轉化下一個時間數量級後,才能得到真正的值。1天轉化成3.14周。他過去因為程式員不擅長估算時間而吃盡了苦頭。我創建了一個用來翻譯程式員時間估算的表格,來儘量縮小估算錯誤。 時 ...
  • 一,效果圖。 二,工程圖。 三,代碼。 RootViewController.h RootViewController.m ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...