Helpers - компьютеры, интернет, программирование

Ошибка при использовании pyopenssl_psk для создания безопасного соединения для набора шифров PSK-AES128-GCM-SHA256

Возникла ошибка при использовании модуля 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')< /эм>

Когда я искал эту ошибку, я узнал, что это происходит из-за неправильной конфигурации рукопожатия на сервере, но не смог найти, где именно это происходит.

30.06.2020

Ответы:


1

Вы забыли вызвать код сервера patch_context:

from OpenSSL.SSL import Context, Connection, TLSv1
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)
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
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)
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')

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)
02.07.2020
  • Спасибо, Марчин, что дал мне знать. Я продолжил дальше и сделал изменения в сервере и клиенте. Теперь я столкнулся со странной ошибкой, когда сервер и клиент пытаются установить безопасное соединение. 04.07.2020
  • Новые материалы

    Интуитивное понимание тензоров в машинном обучении
    Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

    Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
    Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

    Почему объяснимость так важна прямо сейчас?
    По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

    Анимированный математический анализ
    Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

    Создание простого слайдера изображений с помощью JavaScript
    Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

    Создание базы данных с помощью супергероя «Python»
    В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

    ИИ для чайников: руководство для начинающих по пониманию будущего технологий
    Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..


    © 2024 hlprs.ru, Helpers - компьютеры, интернет, программирование