Python ssl支持密码

时间:2017-06-06 16:59:07

标签: python sockets ssl tls1.2 pyopenssl

我想知道为什么没有一种简单的方法可以找到特定ssl上下文支持的密码? (或者我错过了它)

我知道我们可以使用socket.cipher()来获取用于该特定socket的连接的那个,但为什么不能获得所有支持的密码?

另一件事是,

我有一个运行带有密码字符串"HIGH+TLSv1.2:!MD5:!SHA1"的openssl库的服务器。客户端是使用ssl库的python文件,默认选项,在建立连接后,socket.cipher()显示以下元组

('DHE-RSA-AES256-GCM-SHA384', 'TLSv1/SSLv3', 256)

当我明确提到TLSv1.2时,如何与TLSv1建立连接,以及当TLSv1不支持高于SHA384的任何内容时,如何使用SHA1

1 个答案:

答案 0 :(得分:1)

  

我想知道为什么没有一种简单的方法可以找到特定ssl上下文支持的密码? (或者我错过了它)

只有OpenSSL 1.1.0添加了一个函数SSL_CTX_get_ciphers才能访问此列表,而且Python中尚未提供此功能。

('DHE-RSA-AES256-GCM-SHA384', 'TLSv1/SSLv3', 256)
     

当我明确提到TLSv1.2时,如何与TLSv1建立连接,以及当TLSv1不支持高于SHA1的任何东西时,如何使用SHA384?

根据the source code,Python使用SSL_CIPHER_get_version来查找版本字符串。匹配OpenSSL documentation表示OpenSSL 1.0.2:

  

SSL_CIPHER_get_version()返回字符串,表示首先定义密码的SSL / TLS协议版本。 目前是SSLv2或TLSv1 / SSLv3。在某些情况下,它应该返回“TLSv1.2”,但不是;使用SSL_CIPHER_description()

因此,它是OpenSSL中的一个错误,根据OpenSSL 1.1.0中相同功能的文档修复了最新的OpenSSL版本。