这些对 /etc/ssl/openssl.cnf 的更改有什么影响

这些对 /etc/ssl/openssl.cnf 的更改有什么影响

背景:我正在使用依赖于 libssl1.0 的工具 (sqlpackage)(根据StackOverflow 答案) 连接到在 Docker 容器中运行的 SQL Server 实例。我花了很长时间尝试使连接正常工作(由于 SSL 初始化错误而失败),并意外发现了以下解决方法。我不确定效果如何。

我正在运行 Ubuntu 22.04,并从 /etc/ssl/openssl.cnf 中注释掉了以下行:

openssl_conf = openssl_init

它似乎是指其他一些部分(我保留了这些部分但不再提及):

[openssl_init]
providers = provider_sect
...
[provider_sect]
default = default_sect
...
[default_sect]
# activate = 1

根据其他一些研究,我怀疑它现在正在工作,因为我可以建立 TLS 1.0 或 TLS 1.1 连接(而不仅仅是 TLS 1.2),但我可能离题太远了。我真的不明白这个配置文件是如何工作的。

我的问题是:注释掉我注释掉的那一行会有什么影响?这会导致安全漏洞吗?有没有办法可以缩小我的更改范围,将范围缩小到我需要的范围?

编辑 1 2022-06-09

openssl_conf...包含该行时我看到的错误:

*** 已成功与服务器建立连接,但在登录前握手期间发生错误。(提供程序:TCP 提供程序,错误:35 - 捕获到内部异常)

如果有帮助的话,我可以提供更详细的诊断。

答案1

这是一个 OpenSSL 配置文件,旨在与 OpenSSL 3.0 配合使用。所有提供程序功能均已添加到 3.0 中,旧版本的 OpenSSL 无法识别这些功能。由于您使用的是 libssl1.0(可能还有匹配的 libcrypto),因此它无法识别这些新部分。

3.0 提供程序包含加密实现,并允许您插入用于不同目的的不同实现(例如,FIPS 验证的加密,或第三方提供程序,如提供 Quantum 安全加密算法的“oqs”提供程序)。提供程序的默认配置文件条目(您似乎有)实际上作用很小。它提供了结构,以便您可以根据需要添加其他提供程序,并且有一个“默认”提供程序部分。但该部分中没有任何内容(“activate”行被注释掉)。这是因为如果您没有其他提供程序,那么默认提供程序无论如何都会被默认加载和激活。

因此,注释掉这些行是安全的。它不会对系统上使用 OpenSSL 3.0 的其他软件包产生影响,也不会对 sqlpackage 产生任何影响(因为它无论如何都无法理解它)。它如果后续更新将真实提供商配置数据添加到该配置文件中,则以后会出现问题。因此,我不建议直接对 /etc/ssl/openssl.cnf 进行更改。

相反,我会复制一份默认配置文件并注释掉有问题的部分。启动 sqlpackage 进程,并将环境变量OPENSSL_CONF设置为指向配置文件的自定义副本。

相关内容