https 프로토콜은 웹페이지에 접속하는 방문자(클라이언트)와 서버간 주고 받는 데이터를 암호화해서 보안을 올리는 방식으로 현재는 엄밀히 말하자면 SSL은 보안의 헛점이 있어서 TLS 방식을 사용하고 있습니다.

이 부분에 대해 언급하자면 불필요하게 내용이 길어지니 궁금하신 분은 검색을 통해 찾아보시고 NGINX에 SSL인증서를 연결하는 핵심 내용만 살펴보겠습니다.

튜토리얼 환경 : 우분투 16.04 LTS Xenial / NGINX / LetsEncrypt

1. LetsEncrypt 설치

위 명령어를 입력해 LetsEncrpt 및 의존성 패키지를 설치합니다.

2. NGINX를 통한 인증서 발급

현재 웹서비스를 하고 있거나, 준비를 하고 있다면 가상호스트 설정이 되어 있을텐데요. LetsEncrypt에서 SSL 인증서를 받을때는 80포트를 이용해 해당 도메인에 연결된 웹서버가 가동되고 있는지 .well-known 디렉토리를 이용해 발급 서버와 인증 절차를 거치므로 가상호스트 설정에 위의 12-14줄을 추가합니다.

설정을 마쳤다면 NGINX를 재시작 합니다.

이제 인증을 위한 웹서버 설정은 끝났으니 위 명령어를 통해 도메인에 대한 인증서를 발급 받습니다. NGINX에서 설정했던 root 디렉토리는 --webroot-path와 같아야 하고 -d로 2차 도메인을 포함한 인증서를 발급 받을 수 있으니 원하는 도메인을 입력하면 되겠습니다.

만일 나중에 다른 2차 도메인을 별도로 받고 싶다면 재발급 받지 않고 NGINX에서 위처럼 2차 도메인에 대한 가상호스트를 설정한 다음 별도로 인증서를 받을 수 있습니다.

인증서를 발급 받을때 이메일을 입력하게 됩니다. 앞서 얘기한 것처럼 LetsEncrypt에서 발급한 인증서는 3개월짜리 이므로 만료 기간 이전에 입력한 메일로 알림을 받을 수 있습니다.

이메일을 입력하고 Agree 버튼을 눌러 사용 약관을 넘어가면 인증서 발급이 완료됩니다. 발급 받은 인증서는 /etc/letsencrypt/live/도메인명 에 위치합니다.

인증서와 함께 디피-헬만 파라미터(이하 dhparam) 키를 만들어 인증서와 같이 설정해서 좀더 암호화 복잡도를 높이면 보안에 좋아 권장하는 방법입니다. 위 명령어를 입력해 dhparam을 만듭니다.

3. NGINX SSL 호스팅 설정

nginx.conf 파일을 열어 위 구문을 찾아 주석 처리가 되어 있다면 삭제하고 없는 부분은 추가합니다.

가상호스트 설정의 80포트 아래에 위 설정을 본인의 웹서버에 맞게 설정합니다. 중요한 점은 보안을 위해 헤더를 추가하고 발급 받은 SSL 인증서를 설정하는 것입니다.

설정을 마친 다음 NGINX를 재시작, 도메인의 https 프로토콜로 접속해서 인증서가 잘 작동하는지 확인하면 되겠습니다.

4. 재발급과 자동 갱신

재발급 명령어는 위와 같습니다. 여러 도메인을 발급 받았을 경우 그 날짜를 맞추기 쉽지 않기 때문에 crontab을 이용해 위 명령어를 주기적으로 실행해 재발급 가능 기간이 되면 갱신이 되도록 설정합니다. (참고로 갱신이 가능한 시점은 만료 30일 전입니다.)

위 명령어를 입력하면 crontab을 편집할 에디터를 선택할 수 있는데 편한걸로 선택합니다.

편집창의 주석 아래 위처럼 갱신 명령어 실행과 함께 결과값을 로그로 남기고 5분 후 NGINX를 재시작하게 설정합니다. 필자는 웹서버가 가장 널널한 6시에 맞춰놨습니다.

5. 도메인 추가

위에서도 언급했지만 루트도메인에 대한 인증서를 발급 받았는데 나중에 2차 도메인을 인증 받으려면 가상 호스트를 별도로 지정해서 따로 받아 운영할 수 있습니다. 꼭 하나의 인증서에 도메인이 포함되어야 하는건 아니니까 부담없이 추가하면 되겠습니다.

재발급 명령어 입력시 현재 발급 받았던 모든 도메인에 대한 갱신을 시도하고 날짜가 만료일 30일 이전이면 자동 갱신됩니다.

익스트림 매뉴얼 주인장 PG입니다. 다방면의 디지털 기술에 관심이 많고 삽질을 즐겨합니다. 포스트 내용중 궁금한 점이 있다면 댓글로 남겨주세요.

익스트림 매뉴얼의 모든 내용은 불펌금지 입니다. 자세한 내용은 [링크]를 참조하세요.