【问题标题】:How to set ciphers in ssl python socket如何在 ssl python socket 中设置密码
【发布时间】:2018-09-21 07:07:54
【问题描述】:

我想使用密码字符串创建自己的密码套件列表。如果我在 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可以找到here

【问题讨论】:

    标签: python sockets ssl openssl tls1.2


    【解决方案1】:

    我可以简单地包含多个密码,方法是用: 分隔密码并将所有密码作为一个字符串发送。

    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 是应该从客户端调用还是在客户端和服务器双方都必须调用
    【解决方案2】:

    即使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' 之类的字符串。

    【讨论】:

      猜你喜欢
      • 2010-12-29
      • 2020-05-13
      • 1970-01-01
      • 2013-05-07
      • 2023-03-19
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多