我想使用密码字符串创建自己的密码套件列表。如果我在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')
可以找到here函数set_ciphers
。
答案 0 :(得分:0)
我可以通过将密码与:
分开来包含多个密码,并将所有密码作为一个字符串发送。
cipher = 'DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-GCM-SHA256'
context.set_ciphers(cipher)
这样,客户端提供所有密码。您可以通过致电context.get_ciphers()
来确保这一点,您只会看到使用set_cipher
插入的密码。
答案 1 :(得分:0)
即使ssl.SSLContext.get_ciphers()
以友好的格式(字典列表)返回密码,反之亦然,事情也不尽相同。
根据[Python 3]: SSLContext.set_ciphers(ciphers):
为使用此上下文创建的套接字设置可用密码。它应该是OpenSSL cipher list format中的字符串。
关注[OpenSSL]: CIPHER LIST FORMAT:
密码列表由由冒号分隔的一个或多个密码字符串组成。逗号或空格也是可接受的分隔符,但通常使用冒号。
因此,应使用' DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-GCM-SHA256' 等字符串