Dovecot 2.3.4.1에서 TLSv1.2를 사용하도록 강제

Dovecot 2.3.4.1에서 TLSv1.2를 사용하도록 강제

새로운 Debian Buster 업데이트 이후 TLSv1.3에 문제가 생겼습니다.

문제: 내 iOS 메일 클라이언트가 내 메일 서버(12.2)에 연결할 수 없고 지금 당장 업그레이드하고 싶지 않기 때문에 dovecot을 사용하여 TLSv1.3을 비활성화하는 방법을 찾으려고 합니다.

현재 버전은 OpenSSL 1.1.1c 및 Dovecot 2.3.4.1입니다.

Dovecot 2.3에서는 SSL 설정이 ssl_protocols에서 ssl_min_protocol로 변경되었습니다.

# Minimum SSL protocol version to use. Potentially recognized values are SSLv3,
# TLSv1, TLSv1.1, and TLSv1.2, depending on the OpenSSL version used.

하지만 Dovecot이 최소 SSL 프로토콜을 사용하는 대신 TLSv1.2를 사용하도록 강제하고 싶습니다. 왜냐하면 Dovecot은 사용 가능한 가장 높은 SSL 프로토콜(TLSv1.3)보다 먼저 시도하기 때문입니다. TLSv1.3을 설정하면 TLSv1.2가 사용되지 않습니다.

그렇다면 Dovecot 2.3.4.1에서 TLSv1.2를 사용하도록 강제하는 방법을 아는 사람이 있습니까?

답변1

완전한 답변은 아니지만 해결책의 일부일 수 있습니다.

1. @joffrey가 제안한 솔루션을 시도했지만 제대로 작동하지 못했습니다. TLSv1.3 암호화 제품군 활성화 또는 비활성화는 ssl_cipher_list Dovecot 2.3.4.1에서 완전히 무시되는 것 같습니다. ssl_prefer_server_ciphersTLSv1.3에도 아무런 영향을 미치지 않습니다 . 어떤 Dovecot 설정을 시도하더라도 클라이언트가 TLSv1.3을 협상하고 원하는 TLSv1.3 암호화 제품군을 선택하는 것을 막을 수 없었습니다.

이는 아마도 TLSv1.2 이하의 암호를 선택하기 위한 기존 방법 외에도 TLSv1.3 암호 그룹을 선택하기 위한 새로운 방법이 OpenSSL 1.1.1에 도입된 것과 관련이 있을 것입니다. OpenSSL 개발자들은 이것이 야기할 불편함을 알고 있었지만 피할 수 없는 일이라고 말했습니다. https://github.com/openssl/openssl/pull/5392. 비둘기장 커밋 8f6f04ebTLSv1.2 이하의 ssl_ciphersuites기존 방법 외에도 TLSv1.3의 새로운 OpenSSL 방법에 대한 프런트 엔드로 명명될 새로운 Dovecot 옵션의 토대를 마련하는 것 같습니다 . ssl_cipher_list이 커밋은 Dovecot 2.3.9에 처음 포함되었지만 해당 버전은 아직 Debian용으로 패키지되지 않았습니다. 또한 Dovecot에서 언급한 옵션이 보이지 않습니다. 소식또는 온라인 문서이므로 아직 완료되지 않았을 수도 있습니다.

2. 또는 추가 작업을 발견 MaxProtocol = TLSv1.2했습니다 /etc/ssl/openssl.cnf.경고: 이는 OpenSSL을 사용하는 다른 많은 프로그램의 동작도 변경합니다!):

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

이는 Dovecot 2.3.4.1이 TLSv1.3을 협상하는 것을 즉시 방지합니다. 다시 시작할 필요도 없습니다. 그러나 위에서 경고한 것처럼 이 솔루션은 Dovecot뿐만 아니라 다른 애플리케이션에도 영향을 미치므로 사용이 제한됩니다.

설정을 Dovecot에만 적용하기 위해 특정 구성 파일을 가리키도록 환경 변수를 설정해 보았습니다.

# OPENSSL_CONF=/etc/ssl/openssl-max-tlsv12.cnf dovecot -F

그러나 그것은 Dovecot에 아무런 영향을 미치지 않았습니다. 변수가 환경에 표시되고 다른 OpenSSL 애플리케이션에서도 작동하는지 확인했습니다. 그러나 OpenSSL 라이브러리 자체는 환경 변수를 살펴보지 않으며 어떻게든 변수의 내용을 라이브러리에 전달하는 것은 호출 프로그램(Dovecot)의 책임으로 간주되는 것으로 생각됩니다. Dovecot 소스 코드에서 OpenSSL CONF 라이브러리의 사용을 볼 수 없기 때문에 Dovecot이 이를 수행하는지 의심됩니다. 또한 OpenSSL 구성 파일에서 dovecot 애플리케이션 섹션이 작동하도록 할 수 없었고, OpenSSL 구성 파일 위치나 OpenSSL 구성 파일에서 사용할 애플리케이션 섹션 이름을 설정하기 위한 Dovecot 옵션도 찾지 못했습니다. 아마도 다른 누군가가 OpenSSL 설정을 시스템 전체가 아닌 특정 프로그램으로 지정하는 방법을 알고 있을까요?

3. 마지막으로, 물론 언제든지 소스 코드를 편집해 볼 수도 있습니다. 현재 Debian dovecot 패키지의 경우 다음을 복제하여 시작할 수 있습니다. 이 줄SSL_CTX_set_min_proto_version로 변경 SSL_CTX_set_max_proto_version한 후 다시 컴파일하세요. 나 자신도 그렇게까지 가고 싶지는 않았다. 그러면 배포 패키지 대신 업스트림을 직접 사용하기 시작할 수도 있습니다.

답변2

먼저 10-ssl.conf 파일(보통 /etc/dovecot/conf.d/에 있음)을 찾아야 합니다.

편집하고 다음을 포함하는 줄로 이동SSL_프로토콜(내 것은 라인 52입니다). 해당 줄에서 프로토콜을 거부할 수도 있습니다. 당신은 시도 할 수 있습니다

ssl_protocols = TLSv1.2 !TLSv1.3

답변3

나는 시도하거나 재현하지 않았지만 설정을 시도할 수 있습니다.ssl_min_protolTLSv1.2로 정의하고SSL_cipher_list아무것도 포함하지 않도록특정 TLS1.3 암호화.

답변4

local.conf 또는 conf.d/10-ssl.conf에 있는 이 구성 조각을 사용할 수 있습니다.

# doveconf -n | grep -iE "tls|ssl"
ssl = required
ssl_ca = </path/to/ca/bundle.pem
ssl_cert = </path/to/cert.pem
ssl_cipher_list = ALL:!RSA:!CAMELLIA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SHA1:!SHA256:!SHA384:!LOW@STRENGTH
ssl_dh = # hidden, use -P to show it
ssl_key = # hidden, use -P to show it
ssl_min_protocol = TLSv1.2
ssl_prefer_server_ciphers = yes

관련 정보