2016-03-13 2 views
4

Есть ли модуль для управления SSL-связыванием в python, как на стороне клиента, так и на сервере? Модуль SSL по умолчанию для python отлично подходит, но рукопожатие автоматическое. Мне было интересно, если есть модуль, который позволит мне сделать это руководство похожее на это:Модуль для управления SSL-связью в python?

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. Я попытался написать свой собственный, но потерпел неудачу, и я не могу найти какой-либо модуль, который позволит мне это сделать.

ответ

1

Существует несколько реализаций протокола SSL/TLS на чистом-питоне. Любой из них позволит вам сделать это:

Насколько я понимаю ваш вопрос, ваша цель состоит в том, чтобы улучшить ваше понимание протокола. Я лично использовал бы это для этой цели, потому что он имеет обширную документацию. tlslite.tlsconnection.handshakeClientAnonymous является хорошей отправной точкой для вашего расследования, функция в конечном итоге вызывает _handshakeClientAsyncHelper для выполнения фактического рукопожатия.