ray*_*ter 5 python security ssl
是否有一个模块来控制 python 中的 SSL 握手,客户端和服务器?python 默认的 SSL 模块很棒,但是握手是自动的。我想知道是否有一个模块可以让我手动执行类似于此的操作:
import SSLManuel
import socket
s = socket.socket()
s.connect(("server.com",9999))
ClientHello = SSLManuel.generateClientHelloMessage(ssl=TLSv1_2, cipher="ECDHE-RSA-AES128-GCM-SHA256", server="www.server.com")
s.send(ClientHello)
ServerHello = s.recv()#this would receive the server hello
#This would verify the certificate of the server
if SSLManuel.check_cert(ServerHello) == true:
Pre-Master-Key = SSLManuel.generatePreMasterKey()
ClientKeyExchange = SSLManuel.generateClientKeyExchange(Pre-Master-Key)
ChangeCiherSpec = SSLManuel.generateChangeCipherSpec()
ClientFinished = SSLManuel.generateClientFinished()
Sessionkey = SSLManuel.generateMasterKey(Pre-Master-Key)
s.send(ClientKeyExchange)
s.send(ChangeCiherSpec)
s.send(ClientFinished)
ServerFinished = s.recv()
#This will check if the server is ready to communicate securely.
if SSLManuel.checkServerFinshed(ServerFinished) == true:
#I can now use the SessionKey to encrypt data to and from the server
s.send(SSLManuel.encrypt(SessionKey, "GET / HTTP/1.0\n\n"))
response = s.recv()
print(SSLManuel.decrypt(SessionKey, response))
Run Code Online (Sandbox Code Playgroud)
我希望本示例中使用的命名约定可以帮助您理解我要完成的任务。我对 SSL 的大部分知识都来自本文。我曾尝试自己编写但失败了,而且我似乎找不到任何允许我这样做的模块。
SSL/TLS 有几种纯 python 实现。其中任何一个都允许您执行以下操作:
据我了解您的问题,您的目的是提高您对协议的理解。我个人会使用后者来实现此目的,因为它有大量的内联文档。tlslite.tlsconnection.handshakeClientAnonymous是您调查的一个很好的起点,该函数最终调用_handshakeClientAsyncHelper来执行实际的握手。
| 归档时间: |
|
| 查看次数: |
2932 次 |
| 最近记录: |