强制 python 代码使用过时的 openSSL 密码套件来测试服务器的安全配置

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

背景

我有一些 C++ 服务器应该加强安全性。为此,我限制了服务器可以处理的密码套件。

任务

如何测试这个?我有很多用 python 编写的测试来验证服务器功能。现在我在 python 尝试使用不应该使用的 sicpher 套件连接到服务器的地方添加测试。

问题

在基本测试中,我想测试以下密码套件在任何配置中都不可用:

forbidden_ciphers = [
    "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
    "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
    "TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256",
    "TLS_DHE_RSA_WITH_AES_256_CBC_SHA",
    "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
    "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
    "TLS_DHE_RSA_WITH_AES_128_CBC_SHA",
    "TLS_RSA_WITH_AES_256_CBC_SHA",
    "TLS_RSA_WITH_AES_128_CBC_SHA",
]
forbidden_ciphers_str = ':'.join(forbidden_ciphers)

所以我正在尝试配置上下文以使用这个过时的密码:

def test_connection_with_ciphers(url, ciphers_str: str):
    url = urllib.parse.urlparse(url)
    context = ssl.create_default_context()
    context.set_ciphers(ciphers_str)
    ...

这会抛出异常,因为默认情况下此密码被 python 禁用。这里是MCVE。如您所见,

ssl.SSLError: ('No cipher can be selected.',)
是从
context.set_ciphers(ciphers_str)
抛出的。

我明白为什么,这是 python 应用程序的合理安全角度,但我正在使用 python 代码进行测试。

问题

我可以克服这个默认限制吗?我可以强制 python ssl 上下文使用这个密码吗?所以我可以验证我的服务器是否会拒绝正确错误的连接?

python security ssl encryption
© www.soinside.com 2019 - 2024. All rights reserved.