我想知道为什么没有一种简单的方法可以找到特定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
?
答案 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版本。