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

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

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

141A318A:SSL routines:tls_process_ske_dhe:dh key too small

当尝试卷曲网站时。

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

根据bugs.launchpad.netUbuntu 团队特意设置了更高的 SSL 安全级别。

在几个地方我碰到了这样的信息,改为CipherString = DEFAULT@SECLEVEL=21帮助openssl.cnf,但我的配置文件根本没有这样的行,添加它没有任何效果。

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

有什么想法吗?安装一些较旧的 openSSL 包有帮助吗?

提前致谢

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

system_default = system_default_sect 

[system_default_sect] 
MinProtocol = TLSv1.2
CipherString = DEFAULT@SECLEVEL=1 

输出自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

答案1

您的配置更改不太正确。您需要将其添加到配置文件的开头:

openssl_conf = default_conf

然后就这样结束了:

[ default_conf ]

ssl_conf = ssl_sect

[ssl_sect]

system_default = system_default_sect

[system_default_sect]
MinProtocol = TLSv1.2
CipherString = DEFAULT:@SECLEVEL=1

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

export OPENSSL_CONF=/path/to/my/openssl.cnf

这样,您就可以进行更改而不会影响整个系统。

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

% openssl version -d

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

答案2

编辑openssl.cnf文件/etc/ssl

sudo nano /etc/ssl/openssl.cnf

在顶部添加此行:

openssl_conf = openssl_init

并在最后添加以下几行:

[openssl_init]
ssl_conf = ssl_sect

[ssl_sect]
system_default = system_default_sect

[system_default_sect]
CipherString = DEFAULT@SECLEVEL=1

这个对我有用。 :)

参考:当我尝试 CURL 网站时出现 SSL 错误

对于 Laravel,还可以运行

sudo service php7.4-fpm restart

答案3

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

您只需要在 /usr/lib/ssl/openssl.cnf 中进行两块修改,如下面 diff 中所述:

     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

对于剪切和粘贴:

openssl_conf = default_conf
[default_conf]
ssl_conf = ssl_sect

[ssl_sect]
system_default = system_default_sect

[system_default_sect]
MinProtocol = TLSv1.2
CipherString = DEFAULT@SECLEVEL=1

答案4

对于任何系统,在顶部添加openssl.cnf

openssl_conf = default_conf

并在结尾处openssl.cnf

  • 对于 Debian 添加:

    [system_default_sect]
    MinProtocol = TLSv1.0
    CipherString = DEFAULT@SECLEVEL=2
    
  • 对于 Ubuntu 20.04,添加:

    [system_default_sect]
    MinProtocol = TLSv1    #important !
    CipherString = DEFAULT@SECLEVEL=2 # in my case works good with very old software
    

相关内容