
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에서는 이 오류가 발생합니다.
나는 초 레벨 1, 초 레벨 0, ALL, DEFAULT, LEGACY 등의 다른 조합을 사용해 보았지만 DEFAULT:@SECLEVEL=1
그 ALL:@SECLEVEL=1
중 어느 것도 작동하지 않는 것 같습니다. 나는 정기적으로 Apache와 변경 사이에 전체 서버를 다시 시작했습니다.
또한 이를 Apache 구성에 추가해 보았으므로 다음이 있습니다.
Protocols h2 http/1.1
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ALL:@SECLEVEL=0
SSLHonorCipherOrder on
SSLCompression off
SSLSessionTickets off
불행히도 더 이상 통찰력을 얻지 못한 기타 관련 질문/답변:
몇몇 곳에서는 요즘 SECLEVEL
이 작업을 수행하려면 1에서 0으로 낮아야 함을 암시하는 것 같습니다. 예를 들어 제가 수행한 SHA1 인증서의 경우 시가가 아직 없습니다.
TLS 1.0 및 1.1 지원은~ 아니다OpenSSL 3에서는 제거되었으므로(확인했습니다) 적절한 구성으로 지원되어야 합니다.
문서화된 모든 솔루션이 나에게 도움이 되지 않는 것 같고, 하루 종일 디버깅하는 데 시간을 낭비한 후에도 더 이상 가까워지지 않는 것 같습니다. 오래된 암호를 작동시키기 위해 찾은 다른 솔루션이 있습니까? 나는 ALL
암호를 지정하고 있으며 레벨 0과 1 모두에서 내 말을 따르지 않는 것 같아서 다소 이상해 보입니다.
답변1
나는 이것이 가능하다는 것을 알고 있었고 구성이 엉망일 가능성이 높습니다 ... 실제로 그게 바로 그 것입니다.
SECLEVEL을 0으로 설정하는 것은 실제로 필요하지만 여러 위치에 이 설정이 있었고 모든 위치에서 업데이트하지는 않았습니다.
특히, 특정 가상 호스트에는 여전히 SSLCipherSuite ALL:@SECLEVEL=1
이전 OpenSSL 버전에서 잘 작동하는 가 있었지만 이제는 SSLCipherSuite ALL:@SECLEVEL=0
.
(일반 Apache 구성과 /etc/ssl/openssl.cf`에서 이것을 설정했지만 이것은 가상 호스트 수준에서 설정되었으므로 이를 재정의했습니다. 다른 모든 가상 호스트는 이미 레벨 0에 있었습니다. , 그리고 자연스럽게 1로 재정의된 하나의 가상 호스트를 사용하여 테스트하고 있었습니다...)
TLS 1.0이 최신 커널, Apache 또는 OpenSSL에서 지원되지 않는다고 말하는 사람들(예: 이 질문에 대한 의견)은 다음과 같습니다.잘못된그리고 그들은 함께 일해요옳은구성. 이것은 일반적인 오해인 것 같습니다.
현재는 최종 클라이언트가 아직 접속을 하지 않아서(TLS 핸드셰이크 실패) 뭔가 아직은 꺼진 상태인데, openssl s_client
이전과 다르게 지금은 제대로 협상이 진행되고 있는 상태입니다.
그만큼가득한솔루션은 또한 기본적으로 certbot과 acme.sh가 모두 ECDSA를 선호하므로 누락된 암호를 얻으려면 RSA를 명시적으로 요청해야 한다는 사실도 깨달았습니다. 인증서가 동일한 유형으로 갱신되었기 때문에 이전 서버는 제대로 "작동"했습니다.
openssl.cnf
새로운 작업 시스템 의 스니펫 :
cat /etc/ssl/openssl.cnf | grep -v "#"
openssl_conf = openssl_init
[openssl_init]
providers = provider_sect
ssl_conf = ssl_sect
[ssl_sect]
system_default = system_default_sect
[system_default_sect]
MinProtocol = TLSv1.0
CipherString = ALL@SECLEVEL=0