【问题标题】:Module to control SSL handshake in python?在python中控制SSL握手的模块?
【发布时间】:2016-03-13 19:19:43
【问题描述】:

是否有一个模块可以控制 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))

我希望本示例中使用的命名约定可以帮助您了解我要完成的工作。我对 SSL 的大部分知识来自This Article。我尝试自己编写,但失败了,而且我似乎找不到任何可以让我这样做的模块。

【问题讨论】:

  • 嗨,我有一个类似的问题。你找到解决方法了吗?

标签: python security ssl


【解决方案1】:

SSL/TLS 有几个纯 Python 实现。他们中的任何一个都可以让你这样做:

据我了解您的问题,您的目标是提高您对协议的理解。我个人会为此目的使用后者,因为它有大量的内联文档。 tlslite.tlsconnection.handshakeClientAnonymous 是您调查的一个很好的起点,该函数最终会调用 _handshakeClientAsyncHelper 来执行实际的握手。

【讨论】:

  • hi @raymon Lustre:你能找到主要用于密码套件 TLS-PSK-AES-128-GCM-SHA256 和 TLS-PSK- 的 py 模块,它为用户提供“握手机制控制” WITH-NULL-SHA256。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-22
  • 2021-02-05
  • 2017-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-14
相关资源
最近更新 更多