1. TLS協議的TLS握手協議
TLS 為傳輸層安全性協議,是 MySQL 在客戶端與伺服器之間進行加密連接的協議。TLS 有時被稱為 SSL(安全套接層),但是 MySQL 實際上並不使用 SSL 協議進行加密連接,因為它的加密很弱。TLS 協議通過加密數據來確保在兩個通信應用程序之間提供隱私和數據完整性,以便任何第三方都無法攔截通信。它還會驗證對等方以驗證其身份。通過在兩個對等點之間提供安全的通信通道,TLS 協議可以保護消息的完整性並確保其不會被篡改。MySQL 支持多種 TLS 版本協議,此次測試使用 8.0 的 client 為 TLSv1.2。
從 wireshark 中看一下 TLS 握手的步驟:
2. 單片機與pc機的握手協議怎麼寫~!
第一步、要規定通訊波特率、起止位數、數據位、校驗位等內容
比如:波特率9600,1個起始位,1個停止位,8個數據位,無校驗位。
第二步、要確定通訊信息的執行流程,全雙工、半雙工等。最常用的是半雙工模式,也就是一問一答方式。比如:採用半雙工模式,流程如下
1、發送端發送1幀信息(發送)
2、發起端進入等待狀態,等待接收端應答;
3、接收端接收後解析該信息並完成處理,然後將處理結果回送給通訊發起端(應答)
4、發起端收到應答,回到1、。
如此循環下去。
第三步、要規定通訊幀格式。
簡單的協議格式可以是這種結構:
1、發送端: 幀頭 + 幀長度 + 信息內容 +校驗
幀頭:可以用1、2個特殊數字來表示,比如0x1B、0x10;代表一幀的起始
幀長度:用於說明本幀數據的長度,一般用1個位元組比較好
信息內容:不說了
校驗:可以將前3段的所有信息求和,這樣接收端可以進行同樣的運算然後比較結果,從而判斷接收到的信息是否有錯。
舉例:1B 10 0A 00 01 02 03 04 05 06 07 08 09 62
------- --- --------------------------------------- ---
幀頭 長度 信息 校驗和
2、接收端應答信息:
處理成功:'O'+'K'+ 應答信息長度 + 應答信息內容 + 校驗和
處理失敗:'E'+'R'+ 應答信息長度 + 應答信息內容(錯誤代碼) + 校驗和
舉例:'O'+'K' 01 09 xx
------- --- ---- ---
幀頭 長度 信息 校驗和
這種方式及數據結構在串口通訊的實際使用中應用極廣,花點時間去琢磨還是值得的。當然,上面只是提供了思路,要想保證通訊的完整性和正確性,協議中還要補充不少東西,比如接收端處理失敗怎麼辦、收發信息錯誤或不完整怎麼辦、一幀信息容不下全部數據怎麼辦等等。
具體到雙方握手,以上述模式為例:
發送端發送:1B 10 01 00 2C
------------- ---- ----- -----
幀頭 長度 握手命令 校驗和
接收方應答:'O'+'K' 01 09 xx
------- --- ---- ---
幀頭 長度 信息 校驗和
3. 菜鳥教程——http和Https、SSL
HTTP:是互聯網上應用最為廣泛的一種網路協議,是一個客戶端和伺服器端請求和應答的標准(TCP),用於從WWW伺服器傳輸超文本到本地瀏覽器的傳輸協議,它可以使瀏覽器更加高效,使網路傳輸減少。
HTTPS:是以安全為目標的HTTP通道,簡單講是HTTP的安全版,即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。
HTTPS協議的主要作用可以分為兩種:一種是建立一個信息安全通道,來保證數據傳輸的安全;另一種就是確認網站的真實性。
HTTP協議傳輸的數據都是未加密的,也就是明文的,因此使用HTTP協議傳輸隱私信息非常不安全,為了保證這些隱私數據能加密傳輸,於是網景公司設計了SSL(Secure Sockets Layer)協議用於對HTTP協議傳輸的數據進行加密,從而就誕生了HTTPS。簡單來說,HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,要比http協議安全。
HTTPS和HTTP的區別主要如下:
1、https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。
2、http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議。
3、http和https使用的是完全不同的連接方式,用的埠也不一樣,前者是80,後者是443。
4、http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,比http協議安全。
我們都知道HTTPS能夠加密信息,以免敏感信息被第三方獲取,所以很多銀行網站或電子郵箱等等安全級別較高的服務都會採用HTTPS協議。
客戶端在使用HTTPS方式與Web伺服器通信時有以下幾個步驟,如圖所示。
(1)客戶使用https的URL訪問Web伺服器,要求與Web伺服器建立SSL連接。
(2)Web伺服器收到客戶端請求後,會將網站的證書信息(證書中包含公鑰)傳送一份給客戶端。
(3)客戶端的瀏覽器與Web伺服器開始協商SSL連接的安全等級,也就是信息加密的等級。
(4)客戶端的瀏覽器根據雙方同意的安全等級,建立會話密鑰,然後利用網站的公鑰將會話密鑰加密,並傳送給網站。
(5)Web伺服器利用自己的私鑰解密出會話密鑰。
(6)Web伺服器利用會話密鑰加密與客戶端之間的通信。
盡管HTTPS並非絕對安全,掌握根證書的機構、掌握加密演算法的組織同樣可以進行中間人形式的攻擊,但HTTPS仍是現行架構下最安全的解決方案,主要有以下幾個好處:
(1)使用HTTPS協議可認證用戶和伺服器,確保數據發送到正確的客戶機和伺服器;
(2)HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,要比http協議安全,可防止數據在傳輸過程中不被竊取、改變,確保數據的完整性。
(3)HTTPS是現行架構下最安全的解決方案,雖然不是絕對安全,但它大幅增加了中間人攻擊的成本。
(4)谷歌曾在2014年8月份調整搜索引擎演算法,並稱「比起同等HTTP網站,採用HTTPS加密的網站在搜索結果中的排名將會更高」。
雖然說HTTPS有很大的優勢,但其相對來說,還是存在不足之處的:
(1)HTTPS協議握手階段比較費時,會使頁面的載入時間延長近50%,增加10%到20%的耗電;
(2)HTTPS連接緩存不如HTTP高效,會增加數據開銷和功耗,甚至已有的安全措施也會因此而受到影響;
(3)SSL證書需要錢,功能越強大的證書費用越高,個人網站、小網站沒有必要一般不會用。
(4)SSL證書通常需要綁定IP,不能在同一IP上綁定多個域名,IPv4資源不可能支撐這個消耗。
(5)HTTPS協議的加密范圍也比較有限,在黑客攻擊、拒絕服務攻擊、伺服器劫持等方面幾乎起不到什麼作用。最關鍵的,SSL證書的信用鏈體系並不安全,特別是在某些國家可以控制CA根證書的情況下,中間人攻擊一樣可行。
如果需要將網站從http切換到https到底該如何實現呢?
這里需要將頁面中所有的鏈接,例如js,css,圖片等等鏈接都由http改為https。例如:http://www..com改為https://www..com
BTW,這里雖然將http切換為了https,還是建議保留http。所以我們在切換的時候可以做http和https的兼容,具體實現方式是,去掉頁面鏈接中的http頭部,這樣可以自動匹配http頭和https頭。例如:將http://www..com改為//www..com。然後當用戶從http的入口進入訪問頁面時,頁面就是http,如果用戶是從https的入口進入訪問頁面,頁面即使https的。
SSL介紹:
安全套接字(Secure Socket Layer,SSL)協議是Web瀏覽器與Web伺服器之間安全交換信息的協議,提供兩個基本的安全服務:鑒別與保密。
SSL是Netscape於1994年開發的,後來成為了世界上最著名的web安全機制,所有主要的瀏覽器都支持SSL協議。
目前有三個版本:2、3、3.1,最常用的是第3版,是1995年發布的。
在客戶端與伺服器間傳輸的數據是通過使用對稱演算法(如 DES 或 RC4)進行加密的。公用密鑰演算法(通常為 RSA)是用來獲得加密密鑰交換和數字簽名的,此演算法使用伺服器的SSL數字證書中的公用密鑰。有了伺服器的SSL數字證書,客戶端也可以驗證伺服器的身份。SSL 協議的版本 1 和 2 只提供伺服器認證。版本 3 添加了客戶端認證,此認證同時需要客戶端和伺服器的數字證書。
SSL協議的三個特性
① 保密:在握手協議中定義了會話密鑰後,所有的消息都被加密。
② 鑒別:可選的客戶端認證,和強制的伺服器端認證。
③ 完整性:傳送的消息包括消息完整性檢查(使用MAC)。
SSL的位置
SSL介於應用層和TCP層之間。應用層數據不再直接傳遞給傳輸層,而是傳遞給SSL層,SSL層對從應用層收到的數據進行加密,並增加自己的SSL頭。
SSL的工作原理
握手協議(Handshake protocol)
記錄協議(Record protocol)
警報協議(Alert protocol)
1、握手協議
握手協議是客戶機和伺服器用SSL連接通信時使用的第一個子協議,握手協議包括客戶機與伺服器之間的一系列消息。SSL中最復雜的協議就是握手協議。該協議允許伺服器和客戶機相互驗證,協商加密和MAC演算法以及保密密鑰,用來保護在SSL記錄中發送的數據。握手協議是在應用程序的數據傳輸之前使用的。
每個握手協議包含以下3個欄位
(1)Type:表示10種消息類型之一
(2)Length:表示消息長度位元組數
(3)Content:與消息相關的參數
握手協議的4個階段
1.1 建立安全能力
SSL握手的第一階段啟動邏輯連接,建立這個連接的安全能力。首先客戶機向伺服器發出client hello消息並等待伺服器響應,隨後伺服器向客戶機返回server hello消息,對client hello消息中的信息進行確認。
Client hello消息包括Version,Random,Session id,Cipher suite,Compression method等信息。
ClientHello 客戶發送CilentHello信息,包含如下內容:
(1)客戶端可以支持的SSL最高版本號
(2)一個用於生成主秘密的32位元組的隨機數。(等會介紹主秘密是什麼)
(3)一個確定會話的會話ID。
(4)一個客戶端可以支持的密碼套件列表。
密碼套件格式:每個套件都以「SSL」開頭,緊跟著的是密鑰交換演算法。用「With」這個詞把密鑰交換演算法、加密演算法、散列演算法分開,例如:SSL_DHE_RSA_WITH_DES_CBC_SHA, 表示把DHE_RSA(帶有RSA數字簽名的暫時Diffie-HellMan)定義為密鑰交換演算法;把DES_CBC定義為加密演算法;把SHA定義為散列演算法。
(5)一個客戶端可以支持的壓縮演算法列表。
ServerHello伺服器用ServerHello信息應答客戶,包括下列內容
(1)一個SSL版本號。取客戶端支持的最高版本號和服務端支持的最高版本號中的較低者。
(2)一個用於生成主秘密的32位元組的隨機數。(客戶端一個、服務端一個)
(3)會話ID
(4)從客戶端的密碼套件列表中選擇的一個密碼套件
(5)從客戶端的壓縮方法的列表中選擇的壓縮方法
這個階段之後,客戶端服務端知道了下列內容:
(1)SSL版本
(2)密鑰交換、信息驗證和加密演算法
(3)壓縮方法
(4)有關密鑰生成的兩個隨機數。
1.2 伺服器鑒別與密鑰交換
伺服器啟動SSL握手第2階段,是本階段所有消息的唯一發送方,客戶機是所有消息的唯一接收方。該階段分為4步:
(a)證書:伺服器將數字證書和到根CA整個鏈發給客戶端,使客戶端能用伺服器證書中的伺服器公鑰認證伺服器。
(b)伺服器密鑰交換(可選):這里視密鑰交換演算法而定
(c)證書請求:服務端可能會要求客戶自身進行驗證。
(d)伺服器握手完成:第二階段的結束,第三階段開始的信號
這里重點介紹一下服務端的驗證和密鑰交換。這個階段的前面的(a)證書 和(b)伺服器密鑰交換是基於密鑰交換方法的。而在SSL中密鑰交換演算法有6種:無效(沒有密鑰交換)、RSA、匿名Diffie-Hellman、暫時Diffie-Hellman、固定Diffie-Hellman、Fortezza。
在階段1過程客戶端與服務端協商的過程中已經確定使哪種密鑰交換演算法。
如果協商過程中確定使用RSA交換密鑰,那麼過程如下圖:
這個方法中,伺服器在它的第一個信息中,發送了RSA加密/解密公鑰證書。不過,因為預備主秘密是由客戶端在下一個階段生成並發送的,所以第二個信息是空的。注意,公鑰證書會進行從伺服器到客戶端的驗證。當伺服器收到預備主秘密時,它使用私鑰進行解密。服務端擁有私鑰是一個證據,可以證明伺服器是一個它在第一個信息發送的公鑰證書中要求的實體。
其他的幾種密鑰交換演算法這里就不介紹了。可以參考Behrouz A.Forouzan著的《密碼學與網路安全》。
1.3 客戶機鑒別與密鑰交換:
客戶機啟動SSL握手第3階段,是本階段所有消息的唯一發送方,伺服器是所有消息的唯一接收方。該階段分為3步:
(a)證書(可選):為了對伺服器證明自身,客戶要發送一個證書信息,這是可選的,在IIS中可以配置強制客戶端證書認證。
(b)客戶機密鑰交換(Pre-master-secret):這里客戶端將預備主密鑰發送給服務端,注意這里會使用服務端的公鑰進行加密。
(c)證書驗證(可選),對預備秘密和隨機數進行簽名,證明擁有(a)證書的公鑰。
下面也重點介紹一下RSA方式的客戶端驗證和密鑰交換。
這種情況,除非伺服器在階段II明確請求,否則沒有證書信息。客戶端密鑰交換方法包括階段II收到的由RSA公鑰加密的預備主密鑰。
階段III之後,客戶要有伺服器進行驗證,客戶和伺服器都知道預備主密鑰。
1.4 完成
客戶機啟動SSL握手第4階段,使伺服器結束。該階段分為4步,前2個消息來自客戶機,後2個消息來自伺服器。
1.5 密鑰生成的過程
這樣握手協議完成,下面看下什麼是預備主密鑰,主密鑰是怎麼生成的。為了保證信息的完整性和機密性,SSL需要有六個加密秘密:四個密鑰和兩個IV。為了信息的可信性,客戶端需要一個密鑰(HMAC),為了加密要有一個密鑰,為了分組加密要一個IV,服務也是如此。SSL需要的密鑰是單向的,不同於那些在其他方向的密鑰。如果在一個方向上有攻擊,這種攻擊在其他方向是沒影響的。生成過程如下:
2、記錄協議
記錄協議在客戶機和伺服器握手成功後使用,即客戶機和伺服器鑒別對方和確定安全信息交換使用的演算法後,進入SSL記錄協議,記錄協議向SSL連接提供兩個服務:
(1)保密性:使用握手協議定義的秘密密鑰實現
(2)完整性:握手協議定義了MAC,用於保證消息完整性
記錄協議的過程:
3、警報協議
客戶機和伺服器發現錯誤時,向對方發送一個警報消息。如果是致命錯誤,則演算法立即關閉SSL連接,雙方還會先刪除相關的會話號,秘密和密鑰。每個警報消息共2個位元組,第1個位元組表示錯誤類型,如果是警報,則值為1,如果是致命錯誤,則值為2;第2個位元組制定實際錯誤類型。