본문 바로가기

Tool

[GitLab] Let's Encrypt를 활용하여 SSL 적용하기

728x90

개요

소스코드 관리를 위해 GitLab을 설치하였는데, 사설망이 아닌 공개된 곳에 설치하였으므로 보안을 위해 SSL을 적용해보도록 하겠습니다.
금전적인 여유가 있다면 공인기관에서 SSL인증서를 구매하여 적용하는 것도 방법이겠지만, 3개월마다 갱신하는 단점이 있지만 무상으로 공인인증이 가능한 Let's Encrypt를 사용하여 구성해보겠습니다.
여기서, SSL은 기본적으로 도메인 기반으로 동작하기 때문에 도메인을 가지고 계셔야 합니다.

인증을 위한 Certbot 설치

SSL을 GitLab에 적용하기 전에 먼저 Let's Encrypt에서 공식적으로 제공하는 클라이언트인 Certbot을 설치하도록 하겠습니다.
공식 Software Repository에 없기 때문에 별도로 Repository를 추가하겠습니다.

sudo add-apt-repository ppa:certbot/certbot

Repository에 수정작업이 있으면 필히 패키지를 업데이트 해야합니다.

sudo apt-get update

패키지 업데이트가 완료되면 Certbot을 설치합니다.

sudo apt-get install certbot

도메인 레코드에서 A 레코드 추가

저의 경우에는 "git.oofbird.net"이라는 주소를 연결해보도록 하겠습니다.
각자의 도메인 관리사이트에 보시면 "도메인 레코드 관리" 기능이 있습니다. 거기에서 A 레코드에 추가하도록 하겠습니다.
저는 닷네임코리아 라는 사이트를 이용하고 있으며, 연결할 서버의 IP는 제 Ncloud서버의 공인 IP를 기입할 것 입니다.


도메인 인증 준비

Let's Encrypt에서 인증서를 발급할 때 .well-known 이라는 폴더 하위에 특정 텍스트 파일을 가지고 값비교하여 실제 도메인 소유인지 확인을 합니다.
그렇기 때문에 현재 설치된 GitLab의 Nginx를 활용하여 구성하겠습니다.
먼저, 인증 파일이 보관될 장소를 만들겠습니다.

sudo mkdir -p /var/www/letsencrypt

다음으로 GitLab의 Nginx에서 방금 만든 경로를 .well-known 경로로 매핑하는 설정을 추가하도록 하겠습니다.

수정할 파일은 /etc/gitlab/gitlab.rb 입니다. 만약 도메인으로 연결이 안되어있다면 external_url설정도 함께 변경하시면 됩니다.

...
external_url 'http://git.oofbird.net'
...
nginx['custom_gitlab_server_config'] = "location ^~ /.well-known { root /var/www/letsencrypt; }"
...

내용을 분석해보면, 웹 요청이 /.well-known 으로 왔을 경우 관련 컨텐츠를 /var/www/letsencrypt 로 연결하라는 것 입니다.

설정이 완료되었으면 gitlab-ctl을 활용하여 재구성합니다.

sudo gitlab-ctl reconfigure

Certbot을 이용하여 도메인 인증

인증 준비가 완료되었으므로 Certbot을 활용하여 다음 명령으로 SSL 인증키를 발급받을 수 있습니다.

sudo certbot certonly --webroot --webroot-path=/var/www/letsencrypt -d [적용할 도메인]<textarea>

인증 중간에 보시면 이메일 주소입력 부분이 있습니다. 인증서 만기에 따른 알림해주기 때문에 정확한 주소를 기입하시는 것 이 좋습니다.

인증처리가 완료되면 다음 경로에 가보시면 추가된 파일을 볼 수 있습니다.


sudo ls /etc/letsencrypt/live/[인증한 도메인]

총 4개 cert.pem, chain.pem, fullchain.pem, privkey.pem 파일을 보실 수 있으며 이중 fullchain.pem, privkey.pem 파일을 사용하게 됩니다.

GitLab의 SSL 설정 변경

인증키까지 발급이 끝났으므로, GitLab의 설정(관련 파일 /etc/gitlab/gitlab.rb)을 수정하도록 하겠습니다.
외부 접속을 http에서 https로 변경을 하고, http요청을 https로 redirect 하도록 하고, ssl 인증키를 사용하도록 하겠습니다.

...
external_url 'https://[인증한 도메인]'
...
nginx['redirect_http_to_https'] = true
...
nginx['ssl_certificate'] = "/etc/letsencrypt/live/[인증한 도메인]/fullchain.pem"
nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/[인증한 도메인]/privkey.pem"
...

설정이 변경되었으면, gitlab-ctl을 활용하여 재구성합니다.

sudo gitlab-ctl reconfigure


Ncloud의 ACG를 이용하여 443 포트 열기

모든 준비가 완료되었으므로, 접속을 위해 Ncloud의 ACG에 https 포트인 443을 열도록 하겠습니다.

최종 접속 확인

설정이 모두 완료되었으므로, 접속하여 https가 정상적으로 적용되었는지 확인하시면 됩니다.




반응형