먼저, 본 과정을 진행하려면 전제조건이 필요하다.
Ubuntu 16.04
서버 1개(버전에 따라 대동소이할 것이다. 참고자료를 살펴보자).DNS 레코드
.example.com
이라는 서버의 공용 IP 주소를 가리키는 A 레코드.www.example.com
).Let's Encrypt
를 사용하여 SSL 인증서
를 얻는 첫 번째 단계는 서버에 Certbot
소프트웨어를 설치하는 것이다. Certbot
는 최신 버전의 Ubuntu 소프트웨어 저장소
를 유지하므로 해당 저장소를 사용한다. 먼저 업데이트를 하자.
다음으로 저장소를 추가해준다.
다시 업데이트를 한 뒤, Certbot
의 Nginx
패키지를 설치한다.
이렇게 하면 Certbot
은 이제 사용할 준비가 되었지만 Nginx
용 SSL
을 구성하려면 Nginx
의 구성 중 일부를 확인해야 한다.
Nginx
기본 구성 파일을 업데이트하기 위해 vi
편집기로 열어준다.
기존 server_name
부분의 밑줄(_
)을 인증서를 적용할 도메인 이름으로 바꿔준뒤, 파일을 저장한다.
다음으로는 변경된 구성(설정)이 잘 적용되는지 테스트를 진행한다.
테스트가 별 문제없이 잘 되었다면 설정 파일을 적용하기 위해 Nginx
를 다시 로드하여 변경된 설정을 적용한다.
이 부분에 있어서, AWS EC2 인스턴스
를 사용하였기 때문에 참고자료와는 다소 다르다. 기본적으로 Ubuntu
는 ufw
라는 기본적인 방화벽을 가지고 있다. 하지만 다음 사진과 같이 확인해보면 Status: inactive
라고 나온다. 즉, 활성화되어 있지 않다는 뜻이다. 그러므로 참고자료에서의 이 단계는 생략할 수 있다. 하지만 AWS EC2 인스턴스
에서는 보안 그룹
설정을 따로 해주어야 한다. 이는 다음 단계에서 다루도록 하겠다. 기본적으로 SSL
프로토콜은 443
포트 번호를 사용한다고만 알고있도록 하자.
만약 AWS EC2 인스턴스
를 사용하는 것이 아니고, ufw
가 활성화되어 있다면 참고자료의 3단계 - 방화벽을 통한 HTTPS 허용
부분을 참고해서 진행하도록 한다.
Certbot
은 다양한 플러그인을 통해 SSL
인증서를 획득하는 다양한 방법을 제공한다. Nginx
플러그인은 필요할 때마다 Nginx
를 재구성하고 구성을 다시 로드한다.
먼저, sudo certbot --nginx -d example.com -d www.example.com
라는 명령어를 실행하여 example.com
, www.example.com
과 같이 원하는 도메인을 지정해서 Nginx
플러그인을 통해 인증서를 획득할 수 있다(필자는 삽질한다고 이미 한번 과정을 진행했다가 다시 해당 명령어를 실행시켰기 때문에 화면이 조금 다르지만 약간의 변경일 뿐이다. 처음 위 명령어를 실행하면 이메일 등록과 약관 동의 화면이 나온다). 만약 도메인을 더 추가하고 싶다면 -d
옵션을 주고 더 추가하면 된다(물론 설정 파일에 server_name
부분을 변경한 부분에도 추가되어 있어야 한다). 그런데 아래를 보면 에러가 발생했다고 나온다. 이는 위에 지정한 도메인중 rp2-colt.shop
라는 도메인이 등록되지 않았기 때문에 나오는 오류이다.
따라서 위의 오류를 해결하기 위해 가비아에 도메인 레코드를 추가해줬다.
처음 인증서 설치를 진행하면 다음과 같이 이메일 등록과 약관 동의를 거치고나면 기존 HTTP
연결을 어떻게 설정할 건인가에 대한 질문이 나타나는데 목록은 다음과 같다(아래의 1, 2 선택지가 보이는가?).
- 1을 입력한다면 HTTP
연결을 HTTPS
로 리다이렉트 하지 않습니다.
- 2를 입력한다면 HTTP
연결을 HTTPS
로 리다이렉트 합니다.
1 또는 2를 입력하고 엔터를 누르면, 구성이 업데이트 되고 Nginx
서버가 재시작된다.
필자는 2를 입력하여 모든 HTTP
연결을 HTTPS
로 리다이렉트 하는 설정을 선택했다. 필요에 따라 선택해주자. 그리고 기다리면 다음과 같이 인증서 다운로드 및 설치되었다고 나온다.
눈썰미가 있으신 분은 보셨을 수도 있는데, 4.
단계에서 You should test your configuration at:
이라는 문구가 있고, 그 다음에 오는 url
이 있다. 이 url
은 해당 도메인에 대한 서버를 테스트할 수 있는 url
이다. SSL Labs Server Test로 이동해서 다음과 같이 테스트할 도메인을 입력해준 뒤 테스트를 진행한다.
근데 오류가 난다. 왜? 이는 앞 단계에서 언급했던 방화벽과 관련된 문제로, AWS EC2 인스턴스
의 보안 그룹
에 SSL
이 사용되는 443
포트 번호를 열어주지 않았기 때문이다.
따라서 다음과 같이 추가해준다.
이제 다시 앞전의 단계를 거치면 다음과 같이 테스트된 화면에서 등급을 확인할 수 있다.
Let's Encrypt
의 인증서는 90일 동안만 유효하므로, 90일마다 갱신해줘야 한다. 하지만 설치를 하는 과정에서, /etc/cron.d
에 자동으로 갱신 시켜주는 커맨드가 추가되어 있다. 다만, 갱신 프로세스가 잘 동작하는지 테스트를 해보고 싶다면 다음과 같은 명령어를 입력해서 테스트를 진행할 수 있다.
따로 오류가 표시되지 않으면 모든 설정이 완료된 것이다. 필요한 경우 Certbot
은 인증서를 갱신하고 Nginx
를 다시 로드하여 변경 사항을 적용한다. 만약 자동 갱신 프로세스가 실패할 경우 Let's Encrypt
는 지정한 이메일로 인증서가 만료될 때 경고 메시지를 보내준다.