1. 개요
이전 챕터에 이어 nginx에 서브도메인 설정을 해야 하는데, 그에 앞서 필요한 SSL인증서를 발급받고자 한다.
유료 인증서를 구입할 수도 있겠지만, 해당 챕터에서는 Let’s Encrypt에서 무료로 인증서를 발급받는 방법을 정리한다.
2. 인증서 발급
2.1. Let’s Encrypt?
Let’s Encrypt는 무료이며 자동화된 개방형 인증 기관이다.
https서버를 서비스하고자 할 때, 만약 self-signed한 인증서를 적용하게 되면 CA에서 인증받지 못한 인증서이기 때문에 브라우저에서 블락당하게 되는데, Let’s encrypt와 같은 CA를 통해 인증서를 발급받게 되면 https서버를 정상적으로 서비스할 수 있다.
2.2. certbot
Let’s encrypt에서는, 쉘 접근이 가능하다면 certbot을 통해 인증서를 적용하라고 설명한다.
먼저 certbot 에 접속해보면 위와 같은 화면을 확인할 수 있는데, 난 ubuntu서버에서 nginx를 통해 적용할 것이므로 위와 같이 선택한다.
그럼 아래에 친절하게도 certbot을 통해 인증서를 nginx에 적용하는 법을 안내해준다.
2.2.1. snapd설치 및 업데이트
snapd는 최신 우분투OS에는 이미 설치된 채로 배포가 되는데, 만약 없다면 snapd공식페이지 를 참조해 snapd를 설치한다.
그리고 다음과 같이 snapd가 최신 버전인지 확인한다.
$ snap install core
$ snap refresh core
2.2.2. certbot 설치
설치한 snapd를 통해 certbot을 설치한다. OS에 cerbot 구버전이 설치되어있다면 삭제 후 설치하라고 하는데, 난 certbot이 설치되지 않은 상태여서 바로 설치했다.
$ snap install --classic certbot
2.2.3. 인증서 발급 및 nginx 적용
certbot설치가 마무리되었다면 드디어 인증서를 발급받을 수 있다.
nginx 설정파일에 발급과 동시에 적용하도록 할 수도 있으나, nginx 설정은 직접 변경하고 지금은 인증서만 발급받기 위해 해당 명령을 실행한다.
커맨드를 입력하면 어느 도메인의 인증서를 발급받을 것인지를 물어보는데, 이전 챕터에서 발급받은 도메인인 gitlab.kello.com과 artifactory.kello.com을 각각 입력해 인증서를 발급받는다.
$ certbot certonly --nginx
- Let’s encrypt관련 로그: /var/log/letsencrypt/letsencrypt.log
- 발급된 인증서 경로: /etc/letsencrypt/live/artifactory.kello.com
2.2.4. 자동 갱신 테스트
인증서는 기본적으로 3개월 후에 만료되는데, certbot은 해당 인증서가 만료되지 않도록 자동으로 갱신해준다.
해당 명령어를 통해 자동 갱신이 제대로 이루어지는지 테스트해볼 수 있다.
certbot renew --dry-run
확인해보면, /etc/letsencrypt/renewal에 위치한 정보를 통해 인증서를 자동 갱신하는 것을 확인할 수 있다.
3. 결론
도메인 및 인증서 발급까지 완료했으므로, 드디어 서브 도메인에 맞는 서비스를 호출해줄 nginx 프록시 서버를 구축할 차례가 되었다.
모두 처리하고 난 지금이야 별거 아니었네 싶은데, 인증서 발급도 nginx도 처음 해보는 입장에선 상당히 헤맸어서 나와 같은 삽질을 해야하는 사람이나, 내용을 금방 잊어버릴 미래의 나를 위해 해당 내용을 정리한다.
nginx 리버스 프록시 관련 내용은 다음 챕터에서 설명할 예정이다.
4. 일부PC Lets encrypt 접속불가(2021.10.01추가)
4.1. 원인
Lets Encrypt문서에 따라, 2021.09.30을 끝으로 구형 브라우저 및 기기에서 사용되던 ROOT인증서인 DST Root CA X3가 만료되었다.
최신 브라우저에는 ISRG Root X1이라는 루트 인증서를 자체적으로 가지고 있으므로 문제가 없으나, 구 기기(ex. iphone4)를 사용하는 사람들에게는 문제가 생길 수 있다는 것이다.
그런데 10월 1일에 갑작스럽게 집pc로는 gitlab이 접속이 안됐다. (내 pc가 구 기기였던 것으로ㅎ)
http로도 접속 가능하게 해뒀었다면 상관없었겠지만, 무조건 https로만 접속가능하도록 했던 나는 그게 불가능했다.
4.2. 해결
윈도우 업데이트하고 크롬을 업데이트하고 난리를 쳤는데도 안돼서 알아봤더니 레지스트리를 편집해줘야 했다.
window는 자동으로 루트 인증서를 업데이트하는데, 종종 설치한 프로그램에 의해 해당 기능이 비활성화 될 때가 있다고 한다.
결국 아래 설정을 수정한 후 PC를 재기동하니 정상적으로 접속되는 것을 확인할 수 있었다.
- 시작 > Windows 관리 도구 > 레지스트리 편집기(혹은 윈도우+R > regedit)
- HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\SystemCertificates\AuthRoot
- DisableRootAutoUpdate을 0으로 변경
설정 변경 후, 브라우저에서 인증서를 확인해보면 이렇게 최상위 인증서가 ISRG ROOT X1인 것을 확인할 수 있다.