Возникла ошибка при использовании модуля pyopenssl_psk
для набора шифров PSK-AES128-GCM-SHA256 для обеспечения безопасного соединения между сервером и клиентом. я что-то пропустил здесь?
Ошибка: ctx.set_psk_client_callback(client_callback) AttributeError: объект «Контекст» не имеет атрибута «set_psk_client_callback»
код сервера:
from OpenSSL.SSL import Context, Connection, TLSv1_2_METHOD
from openssl_psk import patch_context
PSK_MAP = {
b'testing.domain.0106': b'AD',
}
def server_callback(conn, client_identity):
return PSK_MAP[client_identity]
ctx = Context(TLSv1_2_METHOD)
ctx.set_cipher_list(b'PSK-AES128-GCM-SHA256')
ctx.use_psk_identity_hint(b'testing.domain.0106')
ctx.set_psk_server_callback(server_callback)
server = Connection(ctx)
код клиента:
from OpenSSL.SSL import Context, Connection, TLSv1_2_METHOD
from openssl_psk import patch_context
def client_callback(conn, identity_hint):
return (b'domain.0010', b'AD')
ctx = Context(TLSv1_2_METHOD)
ctx.set_cipher_list(b'PSK-AES128-GCM-SHA256')
ctx.set_psk_client_callback(client_callback)
client = Connection(ctx)
Обновлен код клиента:
from OpenSSL.SSL import Context, Connection, TLSv1_2_METHOD
from openssl_psk import patch_context
import socket,pprint
HOST = '127.0.0.1'
PORT = 4443
def client_callback(conn, identity_hint):
return (b'domain.0010', b'AD')
patch_context()
ctx = Context(TLSv1_2_METHOD)
ctx.set_cipher_list(b'PSK-AES128-GCM-SHA256')
ctx.set_psk_client_callback(client_callback)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conn = Connection(ctx,s)
conn.connect((HOST, PORT))
print("Sending: 'Hello, world!")
conn.send(b"Hello, world!")
print("Closing connection")
conn.close()
Обновлен код сервера:
from OpenSSL.SSL import Context, Connection, TLSv1_2_METHOD
import ssl,socket,pprint
from openssl_psk import patch_context
HOST = '127.0.0.1'
PORT = 4443
PSK_MAP = {
#b'pre_shared_key_identity': b'pre_shared_key'
b'testing.domain.0106': b'AD',
}
def server_callback(conn, client_identity):
return PSK_MAP[client_identity]
patch_context()
ctx = Context(TLSv1_2_METHOD)
ctx.set_cipher_list(b'PSK-AES128-GCM-SHA256')
ctx.use_psk_identity_hint(b'testing.domain.0106')
ctx.set_psk_server_callback(server_callback)
#server = Connection(ctx)
server_hostname = 'testing.domain.0106'
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((HOST, PORT))
sock.listen(5)
conn, addr = sock.accept()
ssock = Connection(ctx,conn)
print("created wrap socket")
buf = b'' # Buffer to hold received client data
try:
while True:
data = ssock.recv(4096)
if data:
# Client sent us data. Append to buffer
buf += data
else:
# No more data from client. Show buffer and close connection.
print("Received:", buf)
break
finally:
print("Closing connection")
ssock.close()
Пожалуйста, найдите ошибку, которая возникает сейчас после добавления patch_context()
SysCallError(errno, errorcode.get(errno))
OpenSSL.SSL.SysCallError: (10054, 'WSAECONNRESET')< /эм>
Когда я искал эту ошибку, я узнал, что это происходит из-за неправильной конфигурации рукопожатия на сервере, но не смог найти, где именно это происходит.