본문 바로가기
강좌

우분투에서 nginx 웹서버 설치 및 SSL 인증서 발급받기

by ProjectDH 2021. 11. 4.

안녕하세요. 오늘은 우분투 서버에 웹서버를 설치하고 SSL 인증서를 발급받는 방법에 대해서 알아보겠습니다.

저의 환경은 aws lightsail 2GB램, 우분투 20.04입니다.

 

먼저 nginx를 설치하는 명령어는 아래와 같습니다.

1. apt install nginx

 

http://서버ip 로 접속하면 다음과 같은 창을 볼 수 있습니다.

접속이 안된다면 http의 기본 포트인 TCP/80 포트포워딩을 했는지와 리눅스 방화벽에 등록했는지 확인해주세요.

KT 공유기 포트포워딩 => https://blog.projectdh.link/4

여기까지 하면 웹서버 설치는 바로 끝났습니다만, 주소 옆에 주의 요함이라고 표시가 되어 있을 겁니다.

저 뜻은 https 프로토콜이 아닌 http 프로토콜을 사용하고 있거나

SSL 인증서의 기간 만료 등의 사유로 SSL 인증서가 유효하지 않다는 것이다. 

 

이제부터 SSL 인증서를 발급받아보겠습니다.

 

먼저 발급을 받기위한 도구의 certbot과 nginx에 인증서를 자동으로 관리할 수 있도록 하는 certbot-nginx를 설치하겠습니다.

1. apt install certbot 

 

2. apt install python-certbot-nginx (설치가 안된다면 apt install python3-certbot-nginx 를 입력해보세요.)

 

인증서를 발급받는 명령어는 아래와 같습니다.

certbot --nginx -d example.com --no-eff-email --agree-tos -m email@gmail.com

(example.com에 여러분의 도메인을 넣으시고, email@gmail.com에 여러분의 메일 주소를 넣으세요.)

 

중간에 redirect를 할거냐 하면 2를 입력하시고 엔터치시면 됩니다. 즉 http로 접속하면 자동으로 https로 넘겨주겠다는 의미입니다.

 

Congratulations! Your certificate and chain have been saved at: 이런 메세지가 보이면 인증서 발급에 성공한 것입니다.

인증서와 키파일의 경로도 아래에 뜨는데 저희는 cerbot 인증서 발급 옵션에 nginx를 넣었기 때문에 경로를 nginx에 굳이 설정하지 않으셔도 자동으로 입력되어 있습니다. (인증서는 certbot에 의해 자동으로 관리됩니다.)

 

이제 https://서버ip 로 접속하면 아까 주의 요함이였던 표시가 좌물쇠 표시로 바뀐 것을 확인할 수 있습니다.

접속이 안된다면 https의 기본 포트인 TCP/443 포트포워딩을 했는지와 리눅스 방화벽에 등록했는지 확인해주세요.

 

하지만 이 인증서는 90일 후에 만료됩니다. 그래서 이제부터는 이 인증서를 자동으로 연장시키는 방법에 대해서 알아보겠습니다.

 

인증서 자동 연장이 가능한지 시뮬레이션을 돌리는 명령어는 다음과 같습니다.

certbot renew --dry-run

 

위의 명령어를 입력하고 잠시 기다리면 다음과 같은 메세지를 보실 수 있습니다.

Congratulations, all renewals succeeded. The following certs have been renewed 

 

실제로 갱신을 하려면 certbot renew 를 입력하시면 됩니다.

이 명령어는 인증서 만료 30일 전부터만 입력할 수 있으므로 매일 자동으로 이 명령어를 실행시키도록 만들겠습니다.

crontab을 이용할 것입니다. crontab은 주기적으로 명령어를 실행할 때 이용하는 명령어입니다.

아래의 명령어를 입력해서 crontab 수정 모드로 들어갑니다.

crontab -e

 

이 명령어를 처음 입력한다면 select an editor라고 뜹니다. 저는 1을 입력했습니다. nano 에디터가 비교적 쉽기 때문입니다.

제일 아래로 내려가서 아래와 같이 추가합니다.

0 0 * * * certbot renew --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx"

 

그리고 컨트롤 x => y => 엔터를 입력해서 저장하고 빠져나옵니다.

이제 매일 0시에 인증서를 연장하는 명령어를 자동으로 실행하게 됩니다. 인증서 만료 30일 전에 인증서가 갱신되어서, 인증서가 만료되는 경우는 없을 것입니다.

 

특정 사이트의 인증서를 갱신하고 싶다면 --cert-name example.com 옵션을 넣으시면 됩니다.

 

다음 강좌에서는 https 의 보안을 높이는 방법에 대해 알아보겠습니다.

댓글