日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

基于TLS协议的安全分析

發布時間:2023/12/3 综合教程 25 生活家
生活随笔 收集整理的這篇文章主要介紹了 基于TLS协议的安全分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1,基于TLS的Socket通信實現

1.1安裝openssl
1.1.1下載地址:
http://slproweb.com/products/Win32OpenSSL.html。
1.1.2配置環境
控制面板->系統和安全->系統->高級系統設置->環境變量

1.1.3使用計算機終端切換保存路徑

1.2生成CA證書
1.2.1創建CA私鑰:genrsa -out ca-key.pem 2048
該命令含義如下:
genrsa——使用RSA算法產生私鑰
-out——輸出文件的路徑
2048——指定私鑰長度

1.2.2創建CA證書請求:req -new -out ca-req.csr -key ca-key.pem

該命令含義如下:
req——執行證書簽發命令
-new——新證書簽發請求
-out——輸出的csr文件的路徑
-key——指定私鑰路徑

1.2.3創建CA自簽證書:x509 -req -in ca-req.csr -out ca-cert.pem -signkey ca-key.pem -days 365

該命令的含義如下:
x509——生成x509格式證書
-req——輸入csr文件
-in——輸入的csr文件的路徑
-out——輸出的cer證書文件的路徑
-signkey——簽發證書的私鑰

1.2.4生成結果目錄如下:

1.3生成Server證書
1.3.1創建Server私鑰:genrsa -out server-key.pem 2048

1.3.2創建Server證書請求:req -new -out server-req.csr -key server-key.pem

1.3.3創建自簽Server證書:x509 -req -in server-req.csr -out server-cert.pem -signkey server-key.pem -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -days 365

該命令含義如下:
-CA——指定CA證書的路徑
-CAkey——指定CA證書的私鑰路徑
-CAserial——指定證書序列號文件的路徑
-CAcreateserial——表示創建證書序列號文件(即上方提到的serial文件),創建的序列號文件默認名稱為-CA,指定的證書名稱后加上.srl后綴

1.3.4生成結果目錄如下:

1.4python中安裝openssl庫
安裝語句:pip install pyopenssl,import ssl無報錯即安裝成功。

2,實現代碼

2.1服務器端實現代碼

import socket
import sslclass server_ssl:def build_listen(self):# 生成SSL上下文context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)# 加載服務器所用證書和私鑰context.load_cert_chain('E:\\pycharm\\ssl\\FILE\\server-cert.pem', 'E:\\pycharm\\ssl\\FILE\\server-key.pem')# 監聽端口with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:sock.bind(('127.0.0.1', 7777))sock.listen(5)# 將socket打包成SSL socketwith context.wrap_socket(sock, server_side=True) as ssock:while True:# 接收客戶端連接client_socket, addr = ssock.accept()msg = client_socket.recv(1024).decode("utf-8")print(f"receive msg from client {addr}:{msg}")# 向客戶端發送信息msg = f"yes , you have client_socketect with server.\r\n".encode("utf-8")client_socket.send(msg)client_socket.close()
if __name__ == "__main__":server = server_ssl()server.build_listen()在這里插入代碼片

2.2客戶端實現代碼

import socket
import sslclass client_ssl:def send_hello(self,):# 生成SSL上下文context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)# 加載信任根證書context.load_verify_locations('E:\\pycharm\\ssl\\FILE\\ca-cert.pem')#與服務端建立socket連接with socket.create_connection(('127.0.0.1',7777)) as sock:# 將socket打包成SSL socket# 注意的是這里的server_hostname不是指服務端IP,而是指服務端證書中設置的CNwith context.wrap_socket(sock, server_hostname='test') as ssock:msg = "do i connect with server ?".encode("utf-8")ssock.send(msg)# 接收服務端返回的信息msg = ssock.recv(1024).decode("utf-8")print(f"receive msg from server : {msg}")ssock.close()if __name__ == "__main__":client = client_ssl()client.send_hello()

2.3運行結果

3,抓包分析


3.1Client Hello:
TLS記錄協議首部:

內容類型(Content Type:Handshake):TLS握手協議,占一字節,0x16

TLS版本(Version):TLS1.0,占兩字節,0x0301

數據長度(Length):512字節,占兩字節,0x0200

TLS握手內容:

握手類型(Handshake Type):客戶Hello,占一字節,0x01;
握手消息長度(Length):508字節,占三字節,0x0001fc;
TLS協議版本(Version):TLS1.2,占兩字節,0x0303;
客戶生成的隨機數(Random):占32字節,0x9bd8d15c9094b4823d8ef1f7347f7414281b9e8c9be796293fcb9e14a62223,其中前四字節是中國標準時間,0x9bd8d15c;
會話id長度(Session ID Length):0,占一字節,0x00;
密碼套件長度(Cipher suites length):130字節,占兩字節,0x0082;
密碼套件(65種套件)(Cipher Suites(65 suites)):占130字節,其中每一種套件占兩字節,密碼套件由四部分組成(基于的協議-密鑰協商交換算法-加密算法和加密模式-MAC算法);
壓縮算法長度(Compression Methods Length):1字節,占一字節,0x01;
壓縮算法(Compression Method):無,占一字節,0x00;
擴展長度(Extensions Length):337字節,占兩字節,0x0151;
擴展:服務器名稱
類型:服務器名稱,占兩字節,0x0000;
擴展長度:9字節,占兩字節,0x0009;
服務器名稱指示擴展:
服務器名稱列表長度(Server Name list length):7字節,占兩字節,0x0007;
服務器名稱類型(Server Name Type):主機名,占1字節,0x00;
服務器名稱長度(Server Name length):4字節,占2字節,0x0004
服務器名稱(Server Name):test,占4字節,0x74657374
擴展:橢圓曲線點格式
類型(Type):橢圓曲線點格式,占2字節,0x000b;
擴展長度:4字節,占2字節,0x0004;
橢圓曲線點格式長度:3字節,占1字節,0x03;
橢圓曲線點格式:每個占1字節;

支持的橢圓曲線類型:有13種類型,每種類型占兩個字節;

支持的簽名算法:有15種類型,每種算法占兩個字節;

3.2服務器Hello
TLS記錄協議首部

內容類型(Content Type:Handshake):TLS握手協議,占一字節,0x16

TLS版本(Version):TLS1.2,占兩字節,0x0303

數據長度(Length):66字節,占兩字節,0x0042

TLS握手內容:


握手類型(Handshake Type):服務器 Hello,占一字節,0x02;
握手消息長度(Length):62字節,占三字節,0x00003e;
TLS協議版本(Version):TLS1.2,占兩字節,0x0303;
客戶生成的隨機數(Random):占32字節,0x6405d04ce1b2de387353475a46cfbd5a6d901d4efc262690ba663afed8c70b86,其中前四字節是中國標準時間,0x6405d04c;
會話id長度(Session ID Length):0,占一字節,0x00;
選擇的加密套件(Cipher Suite):TLS_ECDHE_RSA_AES_256_GCM_SHA384,占兩字節,0xc030

3.3服務器發送自己的證書

握手類型:證書,占兩字節,0x0b;
握手消息長度:854字節,占三字節,0x000356;
證書長度:851字節,占三字節,0x000353;
證書的內容如下:
證書內容的長度:848字節,占三字節,0x000350;
序列號:15977231136593676939,占9字節,0x00ddba871156fa0a8b;
使用的簽名算法:sha256withRSAEncryption;
算法標識:1.2.840.113549.1.1.11,占9字節,0x2a864886f70d01010b;
國家名稱:CN,占2字節,0x4341;
州或省名稱:SC,占2字節,0x5343;
地區名稱:CD,占2字節,0x4344;
組織名稱:no,占2字節,0x6e6f;
組織單位名稱:test,占4字節,0x74657374;
郵箱地址:test,占4字節,0x74657374;
填充長度:0字節,占1字節,0x00;
有效起始時間:2019/12/19 10;58:29,占13字節,0x3139313231393130353832395a;
有效截至時間:2020/12/18 10:58:29,占13字節,0x3230313231383130353832395a;
模數(n):

公開指數(e):65537,占兩字節,0x010001;
加密后的數據:占256字節;

3.4服務器發送密鑰交換

服務器選擇的橢圓曲線類型:secp256r1,占兩字節,0x0017;
公鑰長度:65字節,占一字節,0x65;
哈希算法:SHA512,占1字節,0x06;
簽名算法:RSA,占1字節,0x01;
簽名長度:256字節,占1字節,0x0100;
簽名內容:

3.5服務器hello完畢


握手類型:服務器hello完畢,占一字節,0x0e;

3.6用戶密鑰交換


握手類型:用戶密鑰交換,占1字節,0x10;
握手內容長度:66字節,占3字節,0x000042;
客戶公鑰長度:65字節,占1字節,0x41;
客戶公鑰長度:

3.7客戶端發送更改密碼規范

內容類型(Content Type:Handshake):改變密碼規范協議,占1字節,0x14;
數據長度(Length):1字節,占兩字節,0x0101;
數據內容:0x01;

3.8客戶端發送加密的握手消息


消息長度:40字節,占兩字節,0x0028;

3.9服務器發送新的會話票據

握手類型:新的會話票據,占1字節,0x04;
握手數據長度:186字節,占3字節,0x0000b6;
會話票據的生存時間:300秒,占4字節,0x0000012c;
會話票據長度:176字節,占2字節,0x00b0;
會話票據內容:

3.10服務器發改變密碼規則

(跟客戶發送的一樣這里不再作出解釋)

3.11服務器發送加密的握手消息


消息長度:40字節,占兩字節,0x0028;

4.參考文獻

1,https://blog.csdn.net/g1531997389/article/details/80048313;
2,https://blog.csdn.net/s030602122/article/details/53538383;
3,https://blog.csdn.net/ld11690/article/details/79205566;
4,https://baike.baidu.com/item/TLS/2979545?fr=aladdin;
5,<<網絡安全>>沈鑫剡等編著,清華大學出版社

總結

以上是生活随笔為你收集整理的基于TLS协议的安全分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。