Ubuntu 20.04 - 如何设置较低的 SSL 安全级别?

Łuk*_*ski 41 security ssl curl openssl 20.04

我想问一下是否有办法在 Ubuntu 20.04 上将 SSL 安全级别降低到 1,因为我收到:

141A318A:SSL routines:tls_process_ske_dhe:dh key too small
Run Code Online (Sandbox Code Playgroud)

尝试卷曲网站时。

如果我添加--ciphers 'DEFAULT:!DH'参数,Curl 就可以工作,但是,我无法通过我用 C# 编写的客户端应用程序获取网站。该网站在通过浏览器打开时也能正常工作。

根据bugs.launchpad.net,Ubuntu 团队故意设置了更高的 SSL 安全级别。

在几个地方,我遇到了一个信息,更改CipherString = DEFAULT@SECLEVEL=2为1inopenssl.cnf帮助,但我的配置文件根本没有这样的行并且添加它没有任何效果。

我不控制网站服务器,因此我无法更改其安全配置。

有任何想法吗?安装一些旧的 openSSL 包会有帮助吗?

提前致谢

编辑:至于对我的配置文件的更改,我在最后添加了以下内容:

system_default = system_default_sect 

[system_default_sect] 
MinProtocol = TLSv1.2
CipherString = DEFAULT@SECLEVEL=1 
Run Code Online (Sandbox Code Playgroud)

输出openssl version -a:

OpenSSL 1.1.1f 31 Mar 2020 built on: Mon Apr 20 11:53:50 2020 UTC
platform: debian-amd64
options: bn(64,64) rc4(16x,int) des(int) blowfish(ptr)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -Wa,
--noexecstack -g -O2 -fdebug-prefix-map=/build/openssl-P_ODHM/openssl-1.1.1f=. 
-fstack-protector-strong -Wformat -Werror=format-security
-DOPENSSL_TLS_SECURITY_LEVEL=2 -DOPENSSL_USE_NODELETE
-DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ
-DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT
-DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m
-DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM
-DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM
-DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DNDEBUG
-Wdate-time -D_FORTIFY_SOURCE=2
OPENSSLDIR: "/usr/lib/ssl" ENGINESDIR:
"/usr/lib/x86_64-linux-gnu/engines-1.1" Seeding source: os-specific
Run Code Online (Sandbox Code Playgroud)

Mat*_*ell 64

您没有完全正确地更改配置。您需要将其添加到配置文件的开头:

openssl_conf = default_conf
Run Code Online (Sandbox Code Playgroud)

然后到最后:

[ default_conf ]

ssl_conf = ssl_sect

[ssl_sect]

system_default = system_default_sect

[system_default_sect]
MinProtocol = TLSv1.2
CipherString = DEFAULT:@SECLEVEL=1
Run Code Online (Sandbox Code Playgroud)

请注意,如果您愿意,您可以更改配置文件的本地副本,然后确保您的进程使用OPENSSL_CONF定义为指向配置文件位置的环境变量启动:

export OPENSSL_CONF=/path/to/my/openssl.cnf
Run Code Online (Sandbox Code Playgroud)

这样您就可以在不影响整个系统的情况下进行更改。

注意:要查找系统的 openssl.cnf 文件,请运行以下命令:

% openssl version -d
Run Code Online (Sandbox Code Playgroud)

在ls -l输出的目录上运行以openssl.cnf根据需要通过该目录中的符号链接查看文件的位置。


小智 8

编辑openssl.conf文件:

sudo nano /etc/ssl/openssl.cnf
Run Code Online (Sandbox Code Playgroud)

在顶部添加此行:

openssl_conf = openssl_init
Run Code Online (Sandbox Code Playgroud)

并在最后添加这些行:

[openssl_init]
ssl_conf = ssl_sect

[ssl_sect]
system_default = system_default_sect

[system_default_sect]
CipherString = DEFAULT@SECLEVEL=1
Run Code Online (Sandbox Code Playgroud)

这个对我有用。:)

参考:当我尝试 CURL 网站时,我收到 SSL 错误


Wol*_*ahl 5

上面的两个解决方案让我感到困惑。

您只需要在 /usr/lib/ssl/openssl.cnf 中进行两块修改,如此差异所记录的那样:

     rcsdiff ./openssl.cnf 
    ===================================================================
    RCS file: ./openssl.cnf,v
    retrieving revision 1.1
    diff -r1.1 ./openssl.cnf
    13a14,15
    > openssl_conf = default_conf
    > 
    350a353,362
    > 
    > [default_conf]
    > ssl_conf = ssl_sect
    > 
    > [ssl_sect]
    > system_default = system_default_sect
    > 
    > [system_default_sect]
    > MinProtocol = TLSv1.2
    > CipherString = DEFAULT@SECLEVEL=1

Run Code Online (Sandbox Code Playgroud)

对于剪切和粘贴:

openssl_conf = default_conf
Run Code Online (Sandbox Code Playgroud)
[default_conf]
ssl_conf = ssl_sect

[ssl_sect]
system_default = system_default_sect

[system_default_sect]
MinProtocol = TLSv1.2
CipherString = DEFAULT@SECLEVEL=1
Run Code Online (Sandbox Code Playgroud)