Python ssl 获取密码支持

问题描述 投票:0回答:2

我想知道为什么没有一种简单的方法来查找特定 ssl 上下文支持的密码? (还是我错过了)

我知道我们可以使用

socket.cipher()
来获取用于特定
socket
连接的密码,但为什么不使用某种方法来获取所有受支持的密码呢?

另一件事是,

我有一台运行 openssl 库的服务器,其中包含密码字符串

"HIGH+TLSv1.2:!MD5:!SHA1"
。客户端是一个使用
ssl
库的 python 文件,具有默认选项,建立连接后
socket.cipher()
显示以下元组

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

当我明确提到 TLSv1.2 时,如何与 TLSv1 建立连接?当 TLSv1 不支持高于

SHA384
的任何内容时,如何使用
SHA1

python sockets ssl tls1.2 pyopenssl
2个回答
2
投票

我想知道为什么没有一种简单的方法来查找特定 ssl 上下文支持的密码? (还是我错过了)

仅 OpenSSL 1.1.0 添加了函数 SSL_CTX_get_ciphers 来访问此列表,并且此功能在 Python 中尚不可用。

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

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

根据源代码 Python 使用 SSL_CIPHER_get_version 来查找版本字符串。匹配的 OpenSSL 文档 表示 OpenSSL 1.0.2:

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

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


0
投票

SSLContext.get_ciphers()
是在Python 3.4中添加的。

Python 3.11.6 (main, Oct  2 2023, 13:45:54) [Clang 15.0.0 (clang-1500.0.40.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
>>> from pprint import pprint
>>> pprint(ssl.create_default_context().get_ciphers()[0])
{'aead': True,
 'alg_bits': 256,
 'auth': 'auth-any',
 'description': 'TLS_AES_256_GCM_SHA384         TLSv1.3 Kx=any      Au=any   '
                'Enc=AESGCM(256)            Mac=AEAD',
 'digest': None,
 'id': 50336514,
 'kea': 'kx-any',
 'name': 'TLS_AES_256_GCM_SHA384',
 'protocol': 'TLSv1.3',
 'strength_bits': 256,
 'symmetric': 'aes-256-gcm'}
>>> pprint(sorted([cipher['name'] for cipher in ssl.create_default_context().get_ciphers()]))
['DHE-RSA-AES128-GCM-SHA256',
 'DHE-RSA-AES128-SHA256',
 'DHE-RSA-AES256-GCM-SHA384',
 'DHE-RSA-AES256-SHA256',
 'ECDHE-ECDSA-AES128-GCM-SHA256',
 'ECDHE-ECDSA-AES128-SHA256',
 'ECDHE-ECDSA-AES256-GCM-SHA384',
 'ECDHE-ECDSA-AES256-SHA384',
 'ECDHE-ECDSA-CHACHA20-POLY1305',
 'ECDHE-RSA-AES128-GCM-SHA256',
 'ECDHE-RSA-AES128-SHA256',
 'ECDHE-RSA-AES256-GCM-SHA384',
 'ECDHE-RSA-AES256-SHA384',
 'ECDHE-RSA-CHACHA20-POLY1305',
 'TLS_AES_128_GCM_SHA256',
 'TLS_AES_256_GCM_SHA384',
 'TLS_CHACHA20_POLY1305_SHA256']
>>>
© www.soinside.com 2019 - 2024. All rights reserved.