최신 업데이트 후 이메일 작업 실패, 인증서 검증 실패 (로컬 발급자 인증서를 가져올 수 없음)

유사한 지원 요청이 많이 있음을 알 수 있지만, 이 질문이 중복되는 것 같아 죄송합니다. 예를 들어: Email Notifications Failing after Update , 다만 저희의 오류 메시지는 약간 다릅니다:

“certificate verify failed (unable to get local issuer certificate)”

이것은 5월 11일에 2.9.0으로 업데이트한 후에 발생한 것입니다.
from_version: a76256756fc8442eab960cc1c7d37a737efb5a69,
repository: /var/www/discourse, /var/www/discourse/plugins/styleguide

GitHub에서 확인해 보니 이 커밋이 sidekiq에 영향을 미친다는 것을 알 수 있습니다. 갑자기 더 까다로워진 것일까요? 저는 이 문제를 메일 릴레이 제공업체에게도 문의하고 있지만, 이 문제를 해결하는 방법에 대해 더 구체적인 정보를 제공하거나, 이것이 제 포럼 측(https://forum.solarfarmer.dnv.com/) 문제인지 알려주시면 문제를 더 빨리 해결하는 데 도움이 될 것입니다.

도움 주시면 감사하겠습니다.

이것은 Email Hostname Certificate Mismatch Causing sidekiq Queue Overload, Severe Site Instability 의 문제와 동일합니다.

@RGJ 다음 명령어를 실행해 봤습니다.

openssl s_client -connect  smtp.mydomain.info:25 -starttls smtp -showcerts 2>&1|grep "depth=0"

하지만 다른 도메인이 표시되지 않고, sidekiq와 동일한 오류인 "unable to get local issuer certificate"와 기타 오류 메시지만 표시됩니다. app.yml의 메일 설정을 메일 릴레이로 변경했다가 다시 원래대로 되돌리고, 매번 ./launcher rebuild app을 실행해 봤지만, 아직까지도 문제가 해결되지 않습니다.

이 문제는 세 가지 원인이 있을 수 있습니다:

  • 만료된 인증서
  • 인증서의 호스트네임이 연결하려는 호스트네임과 다름
  • 인증서가 전혀 없음

현재 후자의 경우에 해당하는 것으로 보입니다. 유일한 해결 방법은 STARTTLS를 지원하고 올바른 인증서가 구성된 SMTP 서버를 사용하는 것입니다.

@RGJ 감사합니다 - 그런데 왜 2.9.0 버전으로 업그레이드한 후에야 이 문제가 발생했나요? STARTTLS가 이 요구 사항을 더 엄격하게 적용하기 때문인가요? 저희 메일 릴레이나 app.yml 메일 설정은 아무것도 변경되지 않았습니다. 사이트의 IP는 IT 부서가 관리하는 메일 릴레이에 화이트리스트로 등록되어 있습니다. 제가 직접 관리할 수 있는 부분이 아닙니다. 사이트의 CNAME도 IT 부서가 관리하고 있습니다. 도메인은 서로 다르며, CNAME은 "dnv.com"이고 메일 릴레이는 "dnvgl.com"입니다. 이것이 문제의 일부일까요? IT 부서와도 병행해서 이 문제를 해결하고 있지만, 가능한 한 많은 정보를 전달하려고 노력하고 있습니다. 제 무지를 사과드립니다. 이 중 많은 부분이 제 수준을 넘어서서 용어를 잘못 사용하고 있을 수도 있습니다. 죄송합니다 :frowning:

2.9.0.beta3와 beta4 사이에 Discourse가 Rails 7로 업그레이드되면서 변경 사항이 발생하여 이 문제가 발생했습니다.

Email Hostname Certificate Mismatch Causing sidekiq Queue Overload, Severe Site Instability - #47 by RGJ 참고하세요.

우리 IT 부서는 “메일 릴레이용 인증서에 아무 문제가 없으며, 모두 활성화되어 있고 SMTP 서비스와 함께 올바르게 구성되어 있다"고 합니다. 두 번째로, 이 메일 릴레이를 사용하는 다른 서비스나 클라이언트에서 어떤 문제도 보고받은 적이 없습니다.” :cry:

IT 팀이 office365 onmicrosoft를 사용하여 새 이메일 계정을 생성했지만 여전히 문제가 발생하고 있습니다. 지금은 ReadTimeout 또는 SMTPAuthenticationError: Unrecognized authentication type 중 하나가 나옵니다.

현재 설정은 다음과 같습니다:

DISCOURSE_SMTP_ADDRESS: smtp.office365.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: myusername
DISCOURSE_SMTP_PASSWORD: "mypassword"  # 따옴표가 필요한가요?
DISCOURSE_SMTP_ENABLE_START_TLS: true  # 이 설정이 맞나요?
DISCOURSE_SMTP_DOMAIN: outlook.com  
DISCOURSE_NOTIFICATION_EMAIL: myusername@mycompany.onmicrosoft.com

여기서 my* 부분은 새 이메일 계정에 특정한 값입니다.

@RGJ 도움을 주신 모든 분들께 감사드립니다. 마침내, 정말로 이 문제를 해결했습니다. office365용 조정 사항은 DISCOURSE_SMTP_AUTHENTICATION: login을 사용하는 것입니다.

office365 SMTP 서버 및 포트 설정은 기본적으로 활성화되어 있는 STARTTLS와 함께 smtp.office365.com:587입니다.

사용자 이름은 office365를 사용하는 조직의 전체 이메일 주소이며, 보통 myaccount@mycompany.onmicrosoft.com 형태입니다. 이는 알림 이메일 주소와 같을 수도 있고 다를 수도 있습니다.

최종 설정은 다음과 같습니다:


  DISCOURSE_SMTP_ADDRESS: smtp.office365.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: myacct@mycompany.onmicrosoft.com
  DISCOURSE_SMTP_PASSWORD: mypassword
  DISCOURSE_SMTP_ENABLE_START_TLS: true
  DISCOURSE_SMTP_DOMAIN: outlook.com
  DISCOURSE_NOTIFICATION_EMAIL: myacct@mycompany.com
  DISCOURSE_SMTP_AUTHENTICATION: login

Mail Tester에 따르면 10점 만점에 10점입니다!

여기서도 제대로 구성된 SMTP 서버에서 동일한 문제가 발생하고 있습니다. 이 SMTP 서버는 수십 개의 다른 서비스에서 사용되고 있으며, Let’s Encrypt가 발급한 와일드카드 인증서를 사용하고 있습니다.

오류 메시지는 다음과 같습니다: “(unable to get local issuer certificate)”

Disabling starttls or certificate verification does not work any more 에 설명된 대로 버그라고 생각합니다.

다만 유효한 인증서를 가지고 있다고 하셨으니, 제 추측이 틀린 것일 수도 있습니다.

@RGJ 님이 추천한 명령어로 도메인 이름을 확인해 보세요.

openssl s_client -connect  smtp.mydomain.info:25 -starttls smtp -showcerts 2>&1|grep "depth=0"

openssl이 반환하는 인증서가 있다면, 도메인이 해당 인증서와 일치하는지 확인하세요. 또한 위에 링크된 “Email Hostname Cert Mismatch Causing sidekiq…” 스레드도 확인해 보세요.

또한 이메일 문제 해결 가이드가 제게 큰 도움이 되었습니다. 필요한 내용을 파악하기 위해 여러 번 정독해야 했습니다. 거기서 뭔가 찾으실 수 있을지도 모르겠네요?