본문 바로가기
개발

Microsoft Azure에서 PHPMailer SSL, TLS 인증 오류 해결

by 솜씨제이 2017. 12. 18.

Microsoft Azure에서 PHP 웹 앱으로 PHPMailer를 사용하고 있는데 얼마 전부터 메일 전송이 안 되고 있어서 확인해봤다.

메일 서버는 smtp.gmail.com을 사용하고 SMTP로 TLS를 이용해서 보안 전송하고 있다. PHPMailer에서 아래와 같은 오류가 발생하며 메일 전송이 실패했다.

Warning: stream_socket_enable_crypto(): SSL operation failed with code 1.
OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed

검색을 해보니 PHPMailer Troubleshooting 페이지에서 원인은 서버 인증서에 문제가 있거나(gmail이라서 이건 아님) ISP에서 서버를 리디렉트하거나 PHP 서버 설정의 CA 인증서에 문제가 있는 경우라고 알려 준다. CA 인증서에 문제가 있는 경우 다음 방법으로 해결이 가능하다고 한다.

  • 최신 CA 인증서를 다운로드하고 php.ini 파일에서 다운로드한 CA 인증서 위치를 지정한다.
openssl.cafile = /etc/ssl/private/ca-certs.pem
curl.cainfo = /etc/ssl/private/ca-certs.pem
  • 안전하지 않고 권장하지 않는 방법이지만 인증서 체크를 해제할 수 있다.
$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);

문제는 Azure에서 php.ini 파일을 수정하기 어렵고 .user.ini 파일을 사용할 수 있다고 하지만 CA 인증서의 절대 경로가 유지 되는지 확신할 수가 없다. 그래서 PHPMailer의 SSL 옵션에 cafile 경로를 추가해서 해결했다.

$mail->SMTPOptions = array(
    'ssl' => array(
        'cafile' => dirname(__FILE__).DIRECTORY_SEPARATOR.'cert/cacert.pem'
    )
);


댓글