Email SSL Errors after Update to 2.4.0.beta4

Since upgrading to 2.4.0.beta4, none of my installs that are using Rackspace for outgoing email have been able to send, well, outgoing email. Given that the outgoing email server is, again, Rackspace, I am going to presume that their SSL/TLS settings are correct (and, at any rate, they appear to work in every major email client). Perhaps this thread is related.

Although, after applying recent updates (I am unsure as to precisely which change), the error is no longer the same as that mentioned in the aforementioned thread, but, instead, is now this:

Jobs::HandledExceptionWrapper: Wrapped Net::ReadTimeout: Net::ReadTimeout with #<TCPSocket:(closed)>

I presume this is a bug.

Edit: Another related thread

@Gerhard

Can you try to connect to the SMTP server from within the Docker container?

SMTP with StartTLS (default, unless you changed DISCOURSE_SMTP_ENABLE_START_TLS in app.yml):

openssl s_client -connect <hostname>:<port> -starttls smtp

SMTP

openssl s_client -connect <hostname>:<port>

With the -starttls flag, it simply returns “CONNECTED”. Without -starttls:

root@omnifora-com-app:/var/www/discourse# openssl s_client -connect secure.emailsrvr.com:465
CONNECTED(00000003)
depth=2 C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = COMODO RSA Certification Authority
verify return:1
depth=1 C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = COMODO RSA Domain Validation Secure Server CA
verify return:1
depth=0 OU = Domain Control Validated, OU = EssentialSSL, CN = secure.emailsrvr.com
verify return:1
139636332590208:error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small:../ssl/statem/statem_clnt.c:2156:
---
Certificate chain
 0 s:OU = Domain Control Validated, OU = EssentialSSL, CN = secure.emailsrvr.com
   i:C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = COMODO RSA Domain Validation Secure Server CA
 1 s:C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = COMODO RSA Domain Validation Secure Server CA
   i:C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = COMODO RSA Certification Authority
 2 s:C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = COMODO RSA Certification Authority
   i:C = SE, O = AddTrust AB, OU = AddTrust External TTP Network, CN = AddTrust External CA Root
 3 s:C = SE, O = AddTrust AB, OU = AddTrust External TTP Network, CN = AddTrust External CA Root
   i:C = SE, O = AddTrust AB, OU = AddTrust External TTP Network, CN = AddTrust External CA Root
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIG5jCCBc6gAwIBAgIRAMWoQ0lmf1VC8Ch8zZZTHm0wDQYJKoZIhvcNAQELBQAw
gZAxCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
BgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9ETyBDQSBMaW1pdGVkMTYwNAYD
VQQDEy1DT01PRE8gUlNBIERvbWFpbiBWYWxpZGF0aW9uIFNlY3VyZSBTZXJ2ZXIg
Q0EwHhcNMTkwMTEwMDAwMDAwWhcNMjAwMzEwMjM1OTU5WjBZMSEwHwYDVQQLExhE
b21haW4gQ29udHJvbCBWYWxpZGF0ZWQxFTATBgNVBAsTDEVzc2VudGlhbFNTTDEd
MBsGA1UEAxMUc2VjdXJlLmVtYWlsc3J2ci5jb20wggEiMA0GCSqGSIb3DQEBAQUA
A4IBDwAwggEKAoIBAQDZzFpkI/ujPCuNZpHLueu+/iqUsc5U7+yYa9d6xIbkh2BN
u+OpBNCTn4ACa0a3EaqRVyceUUh8TodUPtkZYLZO6iqwl2eOd8h3NXxtRlyaj0Hz
uSOlRbA5CiVZ4H1Ia8k/DVh+r1Rk6Da/f52wBJE8ICFgm7Uyrjtfcc90gBk+7i4I
y1aNwKW/nqmqQBEiTeyUF2kJiTovtorQo7zaedPefm2VUoKyxe/8jl7qA7F9+1p0
XvvWrc3/vqEEZR6tmcAF8tmp0MSkMnt3klwg/xopVn5nPq52t6fLRXA0aLFBUHzT
U82Iw1Weg+gUVi77ONDIabfYuCqqEgpnAyeUhh8hAgMBAAGjggNvMIIDazAfBgNV
HSMEGDAWgBSQr2o6lFoL2JDqElZz30O0Oija5zAdBgNVHQ4EFgQUFJzBKVTbToPC
UoxWxXfRAJGz+YswDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0l
BBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCME8GA1UdIARIMEYwOgYLKwYBBAGyMQEC
AgcwKzApBggrBgEFBQcCARYdaHR0cHM6Ly9zZWN1cmUuY29tb2RvLmNvbS9DUFMw
CAYGZ4EMAQIBMFQGA1UdHwRNMEswSaBHoEWGQ2h0dHA6Ly9jcmwuY29tb2RvY2Eu
Y29tL0NPTU9ET1JTQURvbWFpblZhbGlkYXRpb25TZWN1cmVTZXJ2ZXJDQS5jcmww
gYUGCCsGAQUFBwEBBHkwdzBPBggrBgEFBQcwAoZDaHR0cDovL2NydC5jb21vZG9j
YS5jb20vQ09NT0RPUlNBRG9tYWluVmFsaWRhdGlvblNlY3VyZVNlcnZlckNBLmNy
dDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2RvY2EuY29tMDkGA1UdEQQy
MDCCFHNlY3VyZS5lbWFpbHNydnIuY29tghh3d3cuc2VjdXJlLmVtYWlsc3J2ci5j
b20wggGABgorBgEEAdZ5AgQCBIIBcASCAWwBagB3ALvZ37wfinG1k5Qjl6qSe0c4
V5UKq1LoGpCWZDaOHtGFAAABaDf6Nt0AAAQDAEgwRgIhAJDqOzt2LWqviVrjKGFL
UCPuu/HWeuILG/7VuDwJWWYYAiEAvCaXH3lSCRWOgGquaz9lW3uITCuKQP0TOOMv
JPbcN/IAdwBep3P531bA57U2SH3QSeAyepGaDIShEhKEGHWWgXFFWAAAAWg3+jcn
AAAEAwBIMEYCIQCxU8IX94IoSwsrpo6zJoUMO4uNGuTkpLSY0h/KWbspqQIhAIy4
XfY5RtTTLpB3EFLXMyQSL9/gyNpfJ1OtbYtOkL0pAHYA8JWkWfIA0YJAEC0vk4iO
rUv+HUfjmeHQNKawqKqOsnMAAAFoN/o5AAAABAMARzBFAiAePxbn6JuVUkYjBVnF
MPHeqyqAaYpdwyGxaC3Cz4WZhAIhAPFXU3e0+7GkNMjXFPQ6UMd55zeUJcxakFIt
ggm7ioLYMA0GCSqGSIb3DQEBCwUAA4IBAQAkLuNWuHt5GOXkzJlys09mg22+MnhF
4y+abm7F54stsv0A2Gc4my4bEXOZ4ozf0g1Yjb/ZVlSVrNC125CSnXd6bEcesjcn
c3oxO+9dFCQGMH4CZPVSoDKBk41+VP9IcnfibhSzV8wFXQh+Tt1OpRoNgqM888Es
JvYP9B2OgDvQFnDNAcJXM5fgX1CilyXqPtz2QYDNVgN8tuRSRPlaGTkZgGMsCO12
GjxLD5UGsxh5c08KSRgd4Uv6BRH/hE62spqvmDUDzuU+Qx9N4/Tz2ocv8LI8GlqV
RYOe+6lLe8t33yH0dnRWKGrpT8gWkul1qLHI9I7LYZMvMKdcxl8oBBGF
-----END CERTIFICATE-----
subject=OU = Domain Control Validated, OU = EssentialSSL, CN = secure.emailsrvr.com

issuer=C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = COMODO RSA Domain Validation Secure Server CA

---
No client certificate CA names sent
---
SSL handshake has read 6414 bytes and written 319 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : 0000
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1569003408
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
---

문제가 다시 아래 내용으로 돌아온 것 같습니다:

Jobs::HandledExceptionWrapper: Wrapped OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: dh key too small

(적어도 지난 수천 건의 실패에서는 그랬습니다.)

그리고: 생일 축하합니다, @gerhard.

해당 오류는 SMTP 서버가 잘못 구성되어 있으며, OpenSSL에서 너무 작다고 판단되는 DH 키를 사용하고 있음을 시사합니다.

Rackspace에서 그런 일이 일어날 가능성은 다소 낮아 보이지만, 그들의 기술 인력 중 한 명을 이 문제에 끌어들이려고 해 볼 수는 있습니다.

글쎄요, 에러는 OpenSSL에서 발생하는데, AFAIK로 Debian / Ruby가 제공하는 기본값을 사용 중인 것 같습니다:man_shrugging:

새로운 버전의 베이스 이미지에는 마침 오래되고 보안이 취약한 서명 알고리즘을 비활성화(deprecate)한 OpenSSL 버전이 패키징된 것으로 보입니다.

저희 회사 인트라넷에는 MD5를 사용하던 오래된 Windows CA가 있었는데, 업그레이드 후 Discourse 설치 환경에서 HTTPS가 완전히 중단되었습니다. Nginx는 "SSL_CTX_use_certificate:ca md too weak"라는 오류를 표시하며 HTTPS 인증서를 로드하는 것을 거부했습니다.

RHEL과 CentOS에는 이러한 설정을 다시 활성화하는 레거시 메커니즘이 있지만, Debian/Ubuntu에서는 유사한 호환성 설정을 찾을 수 없었습니다.

오래되고 보안이 취약한 인증서가 많이 돌아다니고 있으므로 더 많은 사람들이 이 문제에 부딪힐 것으로 생각됩니다. 하지만 인증서를 교체하는 것 외에 할 수 있는 일은 많지 않을 것입니다. 이메일 문제는 Rackspace에 직접 연락하여 문의해 보시는 것을 추천합니다.

이것은 @gerhard에게 하는 질문입니다

이것은 버그인 것 같습니다. Rackspace 기술자에게 확인을 요청했고, 그들은 DH 키에 대해 다음과 같은 정보를 제공했습니다:

공개된 정보는 다음과 같습니다:

CA = Comodo Limited CA
Certificate Key Size = 2048 bit
Domain Name = mx1.emailsrvr.com and mx2.emailsrvr.com
Email server hostname = secure.emailsrvr.com
Mail Host Software (Identify the software and version is running on the MTA) =
ecelerity 2.2.3.49
Cipher Strength = AES256-SHA

2048비트 키가 "너무 작다"고 (정확하게) 판단되지 않을 것이라고 생각합니다.

Reinvented with Accenture 에서 가져옴

현재 권장되는 DH 매개변수의 최소 크기는 2048비트입니다. 1024비트 이하의 값은 모두 안전하지 않다고 간주됩니다.

자, 그럼 구버전의 Debian을 사용하여 DH 키를 확인해 보겠습니다:

docker run --rm -it debian:stretch
apt update && apt install -y openssl
openssl s_client -connect secure.emailsrvr.com:465 | grep "Server Temp Key"

네, DH 키가 확실히 너무 작습니다:

Server Temp Key: DH, 1024 bits

이것은 Rackspace가 수정해야 할 문제라고 생각합니다. 임시 해결책으로 /etc/ssl/openssl.cnf 파일을 편집하여 파일 끝부분의 CipherString = DEFAULT@SECLEVEL=2를 제거할 수 있습니다. 컨테이너를 재시작하면 Sidekiq이 새로운 OpenSSL 설정을 적용해야 합니다.

openssl s_client -connect secure.emailsrvr.com:465 | grep "Server Temp Key"
depth=3 C = SE, O = AddTrust AB, OU = AddTrust External TTP Network, CN = AddTrust External CA Root
verify return:1
depth=2 C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = COMODO RSA Certification Authority
verify return:1
depth=1 C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = COMODO RSA Domain Validation Secure Server CA
verify return:1
depth=0 OU = Domain Control Validated, OU = EssentialSSL, CN = secure.emailsrvr.com
verify return:1
Server Temp Key: DH, 1024 bits

Rackspace와의 대화로 돌아갑니다.

Rackspace 공지:

기다려 주셔서 감사합니다. 또한 이 문제를 알려 주셔서 감사합니다. 현재 DH 키가 1024비트임을 확인했습니다. 제품 및 엔지니어링 팀은 이를 증대시켜야 한다는 점에 동의했으며, 이에 대한 수정 계획을 수립했습니다.

수정이 배포될 정확한 날짜는 아직 알 수 없으나, 목표는 이번 달 중입니다. DH 키 크기를 증대시키면 즉시 업데이트를 제공하겠습니다.

이 문제를 알려 주셔서 다시 한번 감사합니다. 추가적인 질문이나 우려 사항이 있으시면 알려 주십시오!

DH 키가 업그레이드되었다는 통보를 받으면 이 스레드를 업데이트하겠습니다.

그 패치로 문제를 해결할 수 있었지만, 전망이 밝지는 않네요 :slight_smile:
다음 재빌드 시에도 다시 사라지는 거죠? :slight_smile:

아니면 재빌드가 필요할 때까지 Rackspace가 해당 문제를 수정해 주기를 바랍니다. 그렇지 않으면 sed 명령을 사용하여 app.yml에서 openssl.cnf를 수정하여 영구적인 변경 사항을 적용할 수 있습니다.

Rackspace 업데이트:

인내해 주셔서 감사합니다. DH 키 크기가 업데이트되어 이제 인증서 키 크기와 일치합니다. 테스트해 보시고, 추가적인 질문이나 우려 사항이 있으시면 알려 주십시오!

확인:

openssl s_client -connect secure.emailsrvr.com:465 | grep "Server Temp Key"
depth=3 C = SE, O = AddTrust AB, OU = AddTrust External TTP Network, CN = AddTrust External CA Root
verify return:1
depth=2 C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = COMODO RSA Certification Authority
verify return:1
depth=1 C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = COMODO RSA Domain Validation Secure Server CA
verify return:1
depth=0 OU = Domain Control Validated, OU = EssentialSSL, CN = secure.emailsrvr.com
verify return:1
Server Temp Key: DH, 2048 bits

또한 내 Discourse 설치 환경에서 다시 이메일을 보낼 수 있음을 추가로 확인했습니다. 따라서 (적어도 Rackspace의 경우) 이 문제는 해결되었습니다.