1. 程式人生 > >TLS協議測試資源彙總

TLS協議測試資源彙總

本文沒有什麼乾貨,今天有一個需求是測試一下TLS協議,覆蓋RFC文件中的一些異常,異常包括:unexpected_message、bad_record_mac等。更多的異常可以參考tls 1.2的rfc文件:https://tools.ietf.org/html/rfc5246,tls1.0rfc文件:https://tools.ietf.org/html/rfc2246

相關概念

所有連線到網際網路的裝置都有一個共同點,它們依賴安全套接字層(secure socket layer,SSL) 和傳輸層安全(transport layer security,TLS)協議保護傳輸的資訊。

SSL/TLS

協議是用來加密傳輸的協議。如果根據OSI七層模型來分類工作在傳輸層之上,應用層之下的表示層。就常見的HTTP協議而言,可以引入SSL/TLS層,也可以不引入。

關於OpenSSL,OpenSSL專案是安全套接字層(secure sockets layer,SSL)和傳輸層安全(transport layer security,TLS)協議的一個實現,是一個開源專案,大多*nix系統安裝時就繼承了openssl。輸入:openssl version -a來檢視當前的openssl版本。大多數使用者藉助OpenSSL是因為希望配置並執行能夠支援SSL的Web伺服器。整個過程包括3 個步驟:(1) 生成強加密的私鑰;(2) 建立證書籤名申請(certificate signing request,CSR)並且發 送給CA;(3) 在你的Web伺服器上安裝CA提供的證書。具體的伺服器配置和openssl的使用方法可以參考《HTTPS權威指南》。

關於SSL的握手過程可以參考【1】和【2】,核心過程基於非對稱加密演算法:

 

測試

我們的目標在於測試TLS協議的問題,因此設想需要尋找一個基於TLS協議的應用,並且構造TLS資料包觀察異常的覆蓋面。一陣搜尋之後找到了tlsfuzzer【5】,用來fuzz tls協議的。這裡簡單介紹一下工作原理。

原理:sever端首先生成一個私鑰以及根據私鑰生成的證書,之後根據該證書基於openssl來執行一個server。 client端使用scripts中的指令碼來測試。scripts指令碼中覆蓋了部分的異常,但是不是非常全面。舉例,unexpected_message異常:

參考&資源彙總

  1. SSL/TLS協議執行機制的概述 http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html

  2. 圖解SSL/TLS協議 http://www.ruanyifeng.com/blog/2014/09/illustration-ssl.html

  3. google的ssl/tls測試工具:https://github.com/google/nogotofail

  4. 針對ssl來中間人攻擊的工具:https://github.com/droe/sslsplit

  5. tlsfuzzer https://github.com/tomato42/tlsfuzzer

  6. 《https的權威指南》,有高清可複製的pdf可以下載