0

Facing an error while using pyopenssl_psk module for cipher suite PSK-AES128-GCM-SHA256 to achieve secure connection between server and client. am I missing anything here?

Error : ctx.set_psk_client_callback(client_callback) AttributeError: 'Context' object has no attribute 'set_psk_client_callback'

server code :

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)

client code :

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)

Updated Client code :

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()

Updated server code :

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()

Please find the error that is being faced now after adding patch_context()
SysCallError(errno, errorcode.get(errno))
OpenSSL.SSL.SysCallError: (10054, 'WSAECONNRESET')

When i browsed for this error, i got to know that this happens due to bad handshake configuration in server but could not find exactly where it is going wrong.

danny
  • 1,587
  • 2
  • 12
  • 12

1 Answers1

1

You forgot to call 'patch_context' server code :

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]

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)

client code :

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')

patch_context()
ctx = Context(TLSv1_2_METHOD)
ctx.set_cipher_list(b'PSK-AES128-GCM-SHA256')
ctx.set_psk_client_callback(client_callback)

client = Connection(ctx)
  • Thanks Marcin for letting me know. I have continued further and done the changes in server and client . Now I' facing strange error while server and client are trying to establish a secure connection. – danny Jul 04 '20 at 06:36