이메일 호스트명 인증서 불일치로 인한 Sidekiq 큐 과부하 및 심각한 사이트 불안정

올바른 것을 찾는 데 도움이 될 수 있습니다:

dig +short smtp.mydomain.info|xargs -n 1 nslookup|grep name=

불행히도 작동하지 않으며, 오류 메시지는 동일합니다:
SSL_connect returned=1 errno=0 state=error: certificate verify failed (Hostname mismatch)

2.9.0.beta4 버전(0acbd63320)에서는 작동했습니다. 다운그레이드가 가능한가요?

Start TLS를 지원하는 새로운 임시 이메일 계정을 생성했습니다. 2.9.0.beta5 릴리스 전에 문제가 해결되기를 바랍니다.

위에서 주신 조언을 따라 호스트명을 인증서의 이름으로 설정했습니다.

참고로, 이 경우 문제는 업그레이드 시에만 발생한 것이 아니라, 런처에 의해 시작된 재빌드 이후에 발생한 것으로 보입니다. 아마도 런처 스크립트에 문제가 있는 것일까요?

어떻게 진행하셨는지 알려주실 수 있을까요?
SSL과 TLS 없이 포트 25 또는 587을 사용하는 SMTP 서버를 사용할 수 없어 정말 답답합니다.

감사합니다

제 설정에는 TLS가 필요하지 않기 때문에 그때 도움을 드리기 어려울 것 같습니다. 이 문제를 우회할 수 있도록 수정이 이루어질 때까지, 유효한 인증서를 제공하는 제3자 이메일 제공자를 사용하는 것이 유일한 해결책인 것 같습니다.

SMTP 서버에 대해 인증서가 있는 호스트명을 찾기 위해 Richard의 dig 명령어를 시도해 보셨나요?

제 환경도 TLS와 SSL 없이 운영되고 있습니다 :slight_smile:

여기서도 비슷한 문제가 발생했습니다: Can't Send Emails - #14 by sukria.
베이스 이미지나 외부 라이브러리, 또는 gem에 변경 사항이 있었나요?

네, 맞아요. 같은 문제예요… 이 문제가 2주쯤 전에 시작됐어요.

둘 다 시도해 볼 수 있을까요?

DISCOURSE_SMTP_ENABLE_START_TLS: false 
DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

?

처음에 시도해 본 방법들이지만 여전히 동일한 오류가 발생합니다.

SSL_connect returned=1 errno=0 state=error: certificate verify failed (Hostname mismatch)

안녕하세요, 두 가지 옵션을 모두 시도해 보았지만 여전히 작동하지 않습니다:

  DISCOURSE_SMTP_ADDRESS: REDACTED
  DISCOURSE_SMTP_PORT: 25
  DISCOURSE_SMTP_USER_NAME: REDACTED
  DISCOURSE_SMTP_PASSWORD: REDACTED
  DISCOURSE_SMTP_ENABLE_START_TLS: false           # (선택 사항, 기본값 true)
  DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none
  DISCOURSE_SMTP_AUTHENTICATION: "login"

여전히 certificate verify failed (self signed certificate) 오류가 발생합니다.

저에게는 오랫동안 차단성 버그였습니다 …
SMTP TLS를 지원하는 새로운 임시 이메일 주소를 생성하는 것을 권장합니다.

이것이 이 gem과 관련이 있을까요?

저도 정확히 같은 문제를 겪고 있습니다. 어제 2.9.0.beta4 (a5779a7d0b)로 업그레이드(리빌드)하면서 시작되었습니다. app.yml나 다른 설정에 아무런 변경 사항도 없습니다. 그냥 리빌드만 했을 뿐입니다.

현재 실패한 작업(failed jobs)이 1,300개 이상 쌓여 있습니다.

로그에서 SSL 오류가 발생하고 있는 것을 확인했습니다(스크린샷은 아래 참조). 리빌드 이후 갑자기 DISCOURSE_SMTP_ENABLE_START_TLS 플래그를 무시하고 있는 것은 아닌지 궁금합니다.

제 app.yml 파일에는 항상 아래 내용이 포함되어 있었습니다(다시 강조하지만, 변경 사항은 없습니다):

  DISCOURSE_SMTP_ADDRESS: 172.17.0.1
  DISCOURSE_SMTP_PORT: 25
  DISCOURSE_SMTP_AUTHENTICATION: none
  DISCOURSE_SMTP_ENABLE_START_TLS: false           # (선택 사항, 기본값 true)

수정: 이는 메일 서버(호스트)의 메일 로그에서 확인되는 내용입니다. 오류 메시지는 리빌드 이후부터 새로 나타났습니다.

리빌드 전 메일 로그에서 Discourse 관련 마지막 메시지:

May 23 17:16:02 localhost postfix/smtpd[5247]: connect from discourse-docker[172.17.0.2]
May 23 17:16:02 localhost postfix/smtpd[5247]: 0D803B67FB: client=discourse-docker[172.17.0.2]
May 23 17:16:02 localhost postfix/cleanup[5279]: 0D803B67FB: message-id=<topic/421230/2413438.f609f9d756c226a154de43f4@forums.jag-lovers.com>
May 23 17:16:02 localhost postfix/smtpd[5247]: disconnect from discourse-docker[172.17.0.2] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5

리빌드 후 서버의 메일 로그에서 첫 번째 항목:

May 23 17:22:48 localhost postfix/smtpd[10929]: connect from discourse-docker[172.17.0.2]
May 23 17:22:48 localhost postfix/smtpd[10929]: SSL_accept error from discourse-docker[172.17.0.2]: -1
May 23 17:22:48 localhost postfix/smtpd[10929]: warning: TLS library problem: error:14094412:SSL routines:ssl3_read_bytes:sslv3 alert bad certificate:../ssl/record/rec_layer_s3.c:1528:SSL alert number 42:
May 23 17:22:48 localhost postfix/smtpd[10929]: lost connection after STARTTLS from discourse-docker[172.17.0.2]
May 23 17:22:48 localhost postfix/smtpd[10929]: disconnect from discourse-docker[172.17.0.2] ehlo=1 starttls=0/1 commands=1/2

그 이후부터 메일 로그의 Discourse 관련 항목은 모두 위와 같은 형태입니다.

스크린샷:

Discourse Docker 컨테이너 안에서 curl을 사용하여 메시지를 보내는 것을 시도해 보았습니다. 평문 SMTP와 포트 25를 지정하도록 확인한 후, 호스트를 통해 이메일을 정상적으로 보낼 수 있었습니다:

$ cd /var/discourse/
$ sudo ./launcher enter app
x86_64 arch detected.
root@discourse-app:/var/www/discourse# curl smtp://172.17.0.1 --mail-from discourse@mydomain.com --mail-rcpt myname@gmail.com --upload-file README.md
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  7077    0     0  100  7077      0   575k --:--:-- --:--:-- --:--:--  575k
root@discourse-app:/var/www/discourse#

호스트의 이메일 로그에서 이 테스트가 어떻게 보이는지 확인해 보았습니다:

May 24 16:53:49 localhost postfix/smtpd[25494]: connect from discourse-docker[172.17.0.2]
May 24 16:53:49 localhost postfix/smtpd[25494]: EB62CB5FCD: client=discourse-docker[172.17.0.2]
May 24 16:53:49 localhost postfix/cleanup[26008]: EB62CB5FCD: message-id=<>
May 24 16:53:49 localhost opendkim[1365]: EB62CB5FCD: can't determine message sender; accepting
May 24 16:53:49 localhost postfix/smtpd[25494]: disconnect from discourse-docker[172.17.0.2] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5

app.yml에서 TLS를 지정하지 않고 포트 25를 사용했으며, 이는 어제 재빌드 전까지는 정상적으로 작동했었습니다. 따라서 최신 버전의 Discourse가 app.yml의 SMTP 설정을 무시하고 있는 것으로 점점 더 보입니다.

방금 올라온 내용 다시 올립니다. @pfaffman 또는 @codinghorror.

여기서 버그가 있는 건지, 아니면 다른 문제가 있는 건지 어떻게 생각하시나요?

@gunnar 말씀하신 이메일 문제가 바로 이 이슈와 관련되어 있어 게시물을 여기로 옮겼습니다.
“게시물이 이미 사용 중입니다” 오류도 이 문제로 인해 발생하는지는 확실하지 않지만, 이메일에 대해 제공해 주신 세부 사항은 이 이슈와 관련이 있습니다.

30일이 지났는데도 여전히 이런 문제가 있다는 건 정말 터무니없다고 생각합니다…
포럼을 다시 작동시키기 위해 이메일 제공업체를 바꿔야 했습니다.

그건 답답한 일이지만, 제 생각엔 어떤 게름(gem)이 더 이상 잘못된 인증서와/또는 암호화되지 않은 전송을 무시하는 것을 지원하지 않는 것 같습니다. 그런 방식으로 메일을 보낼 수 있었던 시대가 끝난 것일 수도 있습니다. 하지만 저는 직접 그 문제를 겪고 있지 않아서, 제 추측이 맞는지 충분히 자세히 살펴본 적이 없습니다.