[NGINX]ERR_SSL_PROTOCOL_ERROR 해결하기

최근 Letsencrypt 를 통해 SSL 인증서를 재발급받는데 최근 받은 인증서의 설정에서 작은 문제가 있었다.

certbot-auto 를 실행시키면 Git에서 새로운 파일을 다운로드 받는데 그런 업데이트 과정을 거치면서 발생한 문제 같아 보인다.

아무튼 업데이트를 새로 받으면 ERR_SSL_PROTOCOL_ERROR 이라는 에러가 나타나고, 사이트에 접속할 수 없는 문제가 발생한다.

크롬에서는 다음과 같은 에러를 띄운다.

사이트에 보안 연결할 수 없음
ERR_SSL_PROTOCOL_ERROR 에러 

파이어폭스에서는 다음과 같은 에러를 띄운다

보안 연결 실패
SSL_ERROR_RX_UNEXPECTED_NEW_SESSION_TICKET

원인을 찾을 수 없는 문제가 제일 스트레스인데.. 이번 경우가 그랬다. 파이어폭스나, 크롬 등에서 인증서가 이상한 것 같다는 이유로 연결 자체가 성립이 되지 않으니 NGINX에서도 로그가 남지 않았다.

다음은 curl 등으로 직접 서비스에 접속했을 때 나타나는 오류다.

서버에서 직접 접속했을때, SSL_do_handshake() failed (SSL: error:14094085:SSL routines:ssl3_read_bytes:ccs received early) while handshaking 에러를 표출한다.

이 문제는 특징이 있었는데 설정을 수동으로 잡아둔 일부 서비스의 경우에는 문제가 없었다.
따라서 letsencrypt의 업데이트 오류라고 생각을 했고 다음과 같이 NGINX 설정을 수동으로 수정했다.

# /etc/nginx/conf.d/myconf.conf

#NGINX 설정

#include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
#ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
server {

# Certbot 에서 생성한 2가지 파일은 주석처리 해준다

---

ssl_protocols TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem; # dhparam 이 다른 폴더로 이미 설정되어 있다면 그 설정으로 맞춘다.
 
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES1
28-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE
-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SH
A256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-
RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;

---
}

이렇게 하니 문제가 해결되었다. 많은 사람에게 도움이 되길 바라며 글을 마친다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다