如何在 OpenSSL 1.0.2 配置文件中配置“仅 TLS1.2”?

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

我想更新 OpenSSL 1.0.2 的配置(特别是在 AWS 的 Amazon Linux 2 AMI 上找到的 1.0.2k-fips),以便任何使用 OpenSSL 的客户端都拒绝 TLSv1.1、TLSv1 或任何非 TLSv1 的更低版本.2.

我了解到,对于 OpenSSL 1.1+,OpenSSL 配置文件(例如,Amazon Linux 2 上的 /etc/pki/tls/openssl.cnf,或 Debian 衍生产品上的 /usr/lib/ssl/openssl.cnf,或其他任何

$OPENSSL_CONF 
指向),可以指定
openssl_conf
-> 带有
ssl_conf
的部分 -> 带有
system_default
的部分 -> 带有
MinProtocol=TLSv1.2
的部分。

但是,OpenSSL 1.0.2k 中的

ssl_conf
语法是未知的,而是它尝试加载
libssl_conf.so
失败,因为该共享库不存在。

所以 我的问题: 如果尝试使用 TLSv1.1 或更低版本,是否可以将 OpenSSL 1.0.2 配置为失败?至少通过

openssl
二进制文件,或通过使用 Python 3.9 或更低版本的 ssl 模块的任何 Python 代码?


附加信息:至少在带有 OpenSSL 1.0.2k-fips 的 Amazon Linux 2 上,使用

grep
我什至无法在任何与 OpenSSL 1.0.2 相关的二进制文件或共享库中找到字符串 MinProtocol。 (但它确实发生在 OpenSSL 1.1.1s
libssl.so.1.1
中,它与我碰巧在同一个 AL2 系统上的代理一起提供。)

所以这证实了我的怀疑,我的问题的答案是:不,这是不可能的。

python openssl tls1.2 configuration-files
3个回答
0
投票

配置文件中的命名部分没有特定规则,如下所述: https://www.openssl.org/docs/man1.1.1/man5/config.html

“配置文件的第一部分是特殊的,被称为默认部分。这部分通常是未命名的,从文件开始到第一个命名部分。当一个名字被查找时 它首先 命名部分(如果有) 中查找,然后是默认部分。”

所以在其他版本中使用的相同 MinProtocol 字段也必须在这里工作。也许它只是没有在手册页上提到。


0
投票

对了,

MinProtocol
你的openssl版本还不支持

相反,您可以配置要允许的密码列表。当仅选择那些实现 TLS 1.2 的那些时,您将获得想要实现的目标。 首先,生成实现 TLS 1.2 的 openssl 版本支持的所有密码的列表:

openssl ciphers 'TLSv1.2'

输出将是这些密码的冒号(“:”)分隔列表。

在您的配置文件中,将以下行添加到您的 system_default 部分:

CipherString = <colon (“:”) separated list of ciphers copied from the command above>

CipherString
将V.1.2及以下的密码限制在指定的列表中。此参数与 TLS V.1.3 及更高版本无关。使用此配置,您支持所有 TLS 1.2 密码及更高版本。如果您只需要 V.1.2(没有 TLS V.1.3),则需要清除 TLS V.1.3 密码列表,该列表由参数
Ciphersuites
:

指定
Ciphersuites = 

示例(我在这里随机缩短了列表):

openssl_conf = default_conf

[default_conf]
ssl_conf = ssl_section

[ssl_section]
system_default = system_default_section

[system_default_section]
CipherString = TLS_AES_128_GCM_SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-DSS-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384
Ciphersuites =

现在您可以继续,在选择密码时更加挑剔。

要检查配置是否成功,请在配置更改前后发出以下命令:

openssl ciphers -v

0
投票

记录下来,作为一个自我回答(替换为查找 ChatGPT 生成的答案而删除的答案):OpenSSL 1.0.2 不支持通过其配置文件配置允许的 SSL/TLS 协议版本或密码套件。

证据:

  • OpenSSL 1.0.2 二进制文件(至少 OpenSSL 1.0.2k-fips 与来自 AWS 的 Amazon Linux 2 AMI 一起提供)不包含字符串
    MinProtocol
    .
  • ssl_conf
    配置似乎已添加 OpenSSL 1.1.0,例如https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=918727。这似乎除了调用一些OpenSSL API之外,还可以将配置放入OpenSSL配置文件(
    $OPENSSL_CONF
    具有特定于发行版的默认值)。
  • 在这个问题的评论或其他答案中看到的程序都没有实际工作。他们要么忽略配置文件更改,要么无法加载配置,例如使用
    could not load the shared library:dso_dlfcn.c:187:filename(libssl_conf.so): libssl_conf.so: cannot open shared object file: No such file or directory
    .

(正如 ChatGPT 指出的那样,合作客户端可以通过多种方式为 OpenSSL 提供此类设置,例如,通过其 API,或通过 Python

ssl
默认 SSL 上下文;但这不是这个问题的重点。)

© www.soinside.com 2019 - 2024. All rights reserved.