Как установить шифры в сокете ssl python

Я хочу создать свой собственный список шифровальных наборов, используя строки шифров. Следующий код работает, если я помещаю только одну строку в функцию set_ciphers. Но мне нужен индивидуальный список шифров. Есть другой формат, например: ALL:!COMPLEMENTOFDEFAULT:!eNULL, но он не служит той цели, которая мне нужна. У меня есть индивидуальный список разных шифров, которые я не могу объединить, используя второй формат.

import socket, ssl
import pprint

context = ssl.create_default_context()

cipher = ['DHE-RSA-AES128-SHA', 'DHE-RSA-AES256-SHA', 'ECDHE-ECDSA-AES128-GCM-SHA256']
context.set_ciphers(cipher)

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

domain = 'google.com'

sslSocket = context.wrap_socket(s, server_hostname = domain)

sslSocket.connect((domain, 443))
sslSocket.close()
print('closed')

Функцию set_ciphers можно найти здесь.

2
0
5 927
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я мог бы включить более одного простого шифра, разделив их с помощью : и отправив все шифры одной строкой.

cipher = 'DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-GCM-SHA256'
context.set_ciphers(cipher)

Таким образом, клиент предлагает все шифры. Вы можете убедиться в этом, позвонив в context.get_ciphers(), и вы увидите только те шифры, которые вы вставили с помощью set_cipher.

привет, set_cipher должен вызываться со стороны клиента или обязательно на обоих сторонах клиента и сервера

danny 10.06.2020 07:32

Даже если ssl.SSLContext.get_ciphers() возвращает шифры в удобном формате (список словарей), наоборот, все работает иначе.

Согласно [Python 3]: SSLContext.set_ciphers (шифры):

Set the available ciphers for sockets created with this context. It should be a string in the OpenSSL cipher list format.

После [OpenSSL]: ФОРМАТ СПИСКА ШИФРОВ:

The cipher list consists of one or more cipher strings separated by colons. Commas or spaces are also acceptable separators but colons are normally used.

Следовательно, следует использовать такие строки, как 'DHE-RSA-AES128-SHA: DHE-RSA-AES256-SHA: ECDHE-ECDSA-AES128-GCM-SHA256'.

Другие вопросы по теме