卷曲:(35)错误:0A000152:SSL例程::禁用不安全的旧版重新协商

use*_*093 23 vpn ssl curl windows-subsystem-for-linux wsl-2

curl像和这样的命令wget会出现以下错误:curl: (35) error:0A000152:SSL routines::unsafe legacy renegotiation disabled。我正在使用 WSL2 Ubuntu 并在公司防火墙上。我确实将受信任的根 ca 证书导出到 WSL 并更新了证书。然而,在下载 Jenkins、Terraform 等工具时仍然面临这个问题,例如尝试获取 Jenkins 时。

curl -fsSL http://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo tee   /usr/share/keyrings/jen
kins-keyring.asc > /dev/null
curl: (35) error:0A000152:SSL routines::unsafe legacy renegotiation disabled
Run Code Online (Sandbox Code Playgroud)

我使用的是公司 VPN。没有 VPN 命令可以正常工作,但是使用公司网络上的 VPN 时我会收到这些错误。如果我与固件团队一起进行 SSL 绕过,它就会起作用。不确定这里是否还有其他问题。

sudo vim /etc/ssl/openssl.cnf

`#
# OpenSSL example configuration file.
# See doc/man5/config.pod for more info.
#
# This is mostly being used for generation of certificate requests,
# but may be used for auto loading of providers

# Note that you can include other files from the main configuration
# file using the .include directive.
#.include filename

# This definition stops the following lines choking if HOME isn't
# defined.
HOME                    = .

 # Use this in order to automatically load providers.
openssl_conf = openssl_init

# Comment out the next line to ignore configuration errors
config_diagnostics = 1

# Extra OBJECT IDENTIFIER info:
# oid_file       = $ENV::HOME/.oid
oid_section = new_oids

# To use this configuration file with the "-extfile" option of the
# "openssl x509" utility, name here the section containing the
# X.509v3 extensions to use:
# extensions            =
# (Alternatively, use a configuration file that has only
# X.509v3 extensions in its main [= default] section.)

[ new_oids ]
# We can add new OIDs in here for use by 'ca', 'req' and 'ts'.
"/etc/ssl/openssl.cnf" 397L, 12419B            `
Run Code Online (Sandbox Code Playgroud)

Mic*_*sen 31

此错误是由于远程服务器不支持 RFC5746 安全重新协商(或者您的公司防火墙不支持)引起的。在 OpenSSL 1.1.1 中设置了该标志SSL_OP_LEGACY_SERVER_CONNECT,但在 OpenSSL 3 中情况并非如此,根据迁移指南

\n
\n

现在,TLS 连接默认需要安全重新协商 现在,SSL 或 TLS 连接默认需要支持 RFC 5746 安全重新协商才能成功。需要能够连接到旧版对等点的应用程序需要显式设置 SSL_OP_LEGACY_SERVER_CONNECT。因此,\xc2\xa0SSL_OP_LEGACY_SERVER_CONNECT\xc2\xa0 不再设置为 SSL_OP_ALL 的一部分。

\n
\n

可以通过在 OpenSSL conf 中设置它来再次打开此标志,它是一个名为的选项UnsafeLegacyServerConnect

\n
\n

UnsafeLegacyServerConnect:仅允许 OpenSSL 客户端使用不安全的旧版重新协商。相当于 SSL_OP_LEGACY_SERVER_CONNECT。

\n
\n

来源:https ://www.openssl.org/docs/man3.0/man3/SSL_CONF_cmd.html

\n

具有此设置的最小 OpenSSL 配置:

\n
openssl_conf = openssl_init\n\n[openssl_init]\nssl_conf = ssl_sect\n\n[ssl_sect]\nsystem_default = system_default_sect\n\n[system_default_sect]\nOptions = UnsafeLegacyServerConnect\n
Run Code Online (Sandbox Code Playgroud)\n

您也可以只添加Options = UnsafeLegacyServerConnect到现有/etc/ssl/openssl.cnf[system_default_sect].

\n

注意。在 OpenSSL <3.0.4 中,存在一个忽略该UnsafeLegacyServerConnect选项的错误。如果您坚持 <= 3.0.3,您可以使用(更不安全)UnsafeLegacyRenegotiation

\n

  • 多谢!我在尝试从可能存在证书问题的服务器下载时遇到了这个问题(不涉及 VPN)。使用选项“--no-check-certificate”运行 wget 是可以的,但是使用选项“-k”或“--insecure”运行curl 不起作用,直到将上述块添加到“/etc/ssl/openssl.cnf” ”。但这是否会降低我的系统的安全性?难道只针对特定领域才能实现这一点吗? (3认同)
  • 使用以下命令检查您的“openssl”版本:“openssl version”:-) (2认同)

Lat*_*SuD 10

如果您不想对系统进行永久更改,您可以尝试在内存中运行配置,如下所示:

OPENSSL_CONF=<(cat /etc/ssl/openssl.cnf ; echo Options = UnsafeLegacyRenegotiation) curl https://something.com/

展开形式:

OPENSSL_CONF=<(
   cat /etc/ssl/openssl.cnf
   echo Options = UnsafeLegacyRenegotiation
) curl https://something.com/
Run Code Online (Sandbox Code Playgroud)

让我解释一下它的作用。

这部分将为以下命令临时设置一个环境变量。大多数与 SSL 库链接的程序都会识别此变量并使用指示的配置文件:

OPENSSL_CONF="value" command

顺便说一句,我尝试使用 OPENSSL_CONF_INCLUDE 变量,但那个不起作用。

但我没有使用真实的文件,而是使用这个 bash 构造<( ... ),它创建一个临时虚拟文件,其内容是内部命令的输出:

OPENSSL_CONF=<( ... )

内部部分仅打印当前的 openssl.cnf 文件,后面是所需的配置行:

cat /etc/ssl/openssl.cnf ; echo Options = UnsafeLegacyRenegotiation

总而言之,我们使用添加了我们所需行的配置来运行curl。

它在 WSL 的 Ubuntu 中对我有用。

编辑:正如评论所建议的,为了使其在 Debian 中工作,我们必须添加更多行。它可以是这样的:

OPENSSL_CONF=<(
   echo -e 'openssl_conf = openssl_init\n\n[openssl_init]\nssl_conf = ssl_sect\n\n[ssl_sect]'
   echo -e 'system_default = system_default_sect\n\n[system_default_sect]\nOptions = UnsafeLegacyRenegotiation\n'
   cat /etc/ssl/openssl.cnf
)  curl  https://something.com/
Run Code Online (Sandbox Code Playgroud)