AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1143995
Accepted
InterLinked
InterLinked
Asked: 2023-09-19 09:21:09 +0800 CST2023-09-19 09:21:09 +0800 CST 2023-09-19 09:21:09 +0800 CST

TLS 1.0 被较新的 Debian/OpenSSL 破坏

  • 772

我正在将运行 Debian 10 的服务器迁移到运行 Debian 12(和 6.x 内核)的服务器,最后一个似乎不起作用的是 TLS 1.0,我一直在试图弄清楚它。

我知道更改了SECLEVEL和 ,MinProtocol如下所述: https: //stackoverflow.com/a/61568390/6110631,但由于某种原因,这不起作用。

在工作系统上,我有:

[system_default_sect]
MinProtocol = TLSv1.0
CipherString = ALL:@SECLEVEL=1

我尝试在新系统上以相同的方式添加此内容,但 TLS 1.0 似乎仍然不起作用。在 Apache 服务器(取决于应用程序)中,我可以看到:

AH02039: Certificate Verification: Error (68): CA signature digest algorithm too weak

我有点预料到了这一点,因为我认为默认情况下 TLS 1.0 会被禁用,所以我进一步调整了配置。我所做的任何更改似乎都不起作用,并且通过端口镜像从客户端角度进行数据包捕获,我可以看到所有 TLS 协商都彻底失败(在 Client Hello 之后,Alert (Level: Fatal, Description: Protocol Version).

用 进行探测openssl s_client,似乎 TLS 1.0 的某些东西完全被破坏了。

在现有的 Debian 10 服务器上,我得到:

# openssl version
OpenSSL 1.1.1n  15 Mar 2022

# openssl s_client -connect OLDHOST -tls1
CONNECTED(00000003)
depth=2 C = US, O = Internet Security Research Group, CN = ISRG Root X1
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = R3
verify return:1
depth=0 CN = OLDHOST
verify return:1
---
Certificate chain
 0 s:CN = OLDHOST
   i:C = US, O = Let's Encrypt, CN = R3
 1 s:C = US, O = Let's Encrypt, CN = R3
   i:C = US, O = Internet Security Research Group, CN = ISRG Root X1
 2 s:C = US, O = Internet Security Research Group, CN = ISRG Root X1
   i:O = Digital Signature Trust Co., CN = DST Root CA X3
---
Server certificate
-----BEGIN CERTIFICATE-----

然而,在新的 Debian 12 服务器上,我得到:

# openssl version
OpenSSL 3.0.9 30 May 2023 (Library: OpenSSL 3.0.9 30 May 2023)

# openssl s_client -connect NEWHOST -tls1
CONNECTED(00000003)
140101680407744:error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error:../ssl/record/rec_layer_s3.c:1544:SSL alert number 80
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 136 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1
    Cipher    : 0000
    Session-ID:
    Session-ID-ctx:
    Master-Key:
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1695085443
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no

TLS 1.2 仍然可以正常工作,但我在 TLS 1.0 和 TLS 1.1 中得到了这个。

我尝试过使用DEFAULT:@SECLEVEL=1,ALL:@SECLEVEL=1以及 sec level 1、sec level 0、ALL、DEFAULT、LEGACY 等的其他组合。它们似乎都不起作用。我一直在更改之间定期重新启动 Apache 和整个服务器。

我还尝试将其添加到 Apache 配置中,因此我有以下内容:

Protocols h2 http/1.1
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ALL:@SECLEVEL=0
SSLHonorCipherOrder on
SSLCompression off
SSLSessionTickets off

其他相关问题/答案,不幸的是没有产生更多的见解:

  • SSLVerifyClient 不适用于新的 openssl 和\或新的 apache (debian 10)

  • https://stackoverflow.com/questions/40365295/openssl-1-0-2-and-error-ssl-ctx-newlibrary-has-no-ciphers

  • https://stackoverflow.com/questions/61927683/how-to-enable-the-old-tls-1-0-and-tls-1-1-on-apache-on-ubuntu-20-04

  • https://bugzilla.redhat.com/show_bug.cgi?id=2069239

有几个地方似乎确实暗示,如今,您必须SECLEVEL从 1 降低到 0 才能使其正常工作,例如对于 SHA1 证书,我已经完成了,但仍然没有雪茄。

OpenSSL 3 中尚未删除TLS 1.0 和 1.1 支持(我确实检查过),因此应该通过正确的配置来支持它。

所有记录的解决方案似乎都不适合我,而且在浪费了一整天的调试时间后,我似乎并没有更接近。还有其他人找到让旧密码工作的解决方案吗?我指定了ALL0 级和 1 级的密码,但它似乎不服从我的指示,所以这看起来相当奇怪。

ssl
  • 1 1 个回答
  • 91 Views

1 个回答

  • Voted
  1. Best Answer
    InterLinked
    2023-09-19T19:05:55+08:002023-09-19T19:05:55+08:00

    我知道这是可能的,而且很可能是配置混乱……确实,就是这样。

    将 SECLEVEL 设置为 0 确实是必要的,但我在多个地方都有这个,并且没有在所有地方更新它。

    特别是,特定的虚拟主机仍然有SSLCipherSuite ALL:@SECLEVEL=1,这与旧的 OpenSSL 版本一起工作得很好,但现在需要是SSLCipherSuite ALL:@SECLEVEL=0.

    (我已经在一般的 Apache 配置以及 /etc/ssl/openssl.cf` 中设置了这个,但由于这是在虚拟主机级别设置的,所以它会覆盖它。所有其他虚拟主机碰巧已经处于级别 0 ,我只是碰巧使用一个被覆盖为 1 的虚拟主机进行测试,自然......)

    我确实想重申,那些说最新内核、Apache 或 OpenSSL 不支持 TLS 1.0 的人(例如在对此问题的评论中)是错误的,他们确实可以使用正确的配置。这似乎是一个常见的误解。

    目前,最终客户端仍然没有连接(TLS 握手失败),所以有些东西仍然关闭,但openssl s_client现在可以正常协商,与以前不同,这是进步。

    完整的解决方案还意识到,默认情况下 certbot 和 acme.sh 现在更喜欢 ECDSA,因此您需要显式请求 RSA 来获取丢失的密码。旧服务器“工作”正常,因为证书正在更新相同类型。

    • 0

相关问题

  • 如何使用 Tomcat 5.5 更新 SSL 证书

  • 为 IIS6 自行生成 SSL 证书?

  • plesk 上的域和子域 ssl 访问

  • 如何设置 SSL 邮件服务器?

  • 如何通过 SVN 命令行接受 SSL 证书?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve