일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- PDA
- 기념일관리
- 설치제거
- 크래시로그
- net
- plcrashreporter
- 자바스크립트
- Font
- MFC
- 와이브로
- EUC-KR
- php
- self-signed ssl
- .net
- 한 번만 실행
- GDI
- C/C++
- Antialiasing
- JavaScript
- 데이터 전달
- API
- phpmailer
- protobuf-c
- 블루투스 헤드셋
- crashlog
- M8200
- docker
- VS2008
- ClickOnce
- C#
- Today
- Total
~☆~ 우하하!!~ 개발블로그
pfSense 내부의 VM에서 Let's Encrypt 인증서 발급 및 갱신하기 본문
pfSense 를 방화벽으로 설치하고, 내부 subnet 에 gitlab 등 다양한 서버를 구성하여 운영중이다.
gitlab 은 80 또는 443 포트가 아닌 특별 번호의 포트를 사용하여 구성하였다. 아래에서 설명의 편의를 위하여 특별 번호의 포트를 7788 로 가정한다.
gitlab 은 https 통신이 아니면 보안상 위험이 있으므로 SSL 통신되도록 구성하였고, SSL 통신 포트를 7788 로 잡았다.
pfSense 방화벽에서도 7788 이 아닌 포트로는 gitlab 을 설치한 VM 에 접근되지 못하도록 설정했다.
이 경우 gitlab 에서 사용할 SSL 인증서인 let's encrypt 인증서를 발급받고 갱신하기 위해서는 임시로 80과 443 포트 통신을 허용하도록 수동작업해주는 수 밖에 없었는데, chatGPT 의 도움으로 방법을 알게 되어 기록한다.
우선 해당 서버에 설정한 도메인이 woohahaapps.com 이고, gitlab VM에는 gitlab 서브도메인을 할당해놓은 상태이다.
해당 도메인의 DNS 정보는 cloudflare 를 이용하여 관리하고 있다.
Certbot 설치 (ubuntu)
sudo apt update
sudo apt install certbot
DNS 플러그인 설치 (cloudflare)
sudo apt update
sudo apt install certbot python3-certbot-dns-cloudflare
Cloudflare API 토큰 발급
[계정관리] - [계정 API 토큰] 메뉴로 이동한다.
토큰 생성 버튼을 클릭한다.
영역 DNS 편집 템플릿을 사용한다.
영역 리소스에서 대상 도메인을 선택한다.
토큰을 생성하고나서 값을 잘 보관해둔다.
이 토큰값을 아래 파일에 형식을 갖추어 저장한다.
/etc/letsencrypt/cloudflare.ini
sudo vi /etc/letsencrypt/cloudflare.ini
토큰값을 저장하는 형식은 다음과 같다.
dns_cloudflare_api_token = your_cloudflare_api_token
= 기호의 오른쪽에 your_cloudflare_api_token 의 자리에 발급받은 토큰값을 채워넣으면 된다.
아래 명령으로 /etc/letsencrypt/cloudflare.ini 파일의 권한을 제한하여 안전하게 보호한다.
sudo chmod 600 /etc/letsencrypt/cloudflare.ini
Let's Encrypt SSL 인증서 발급 (certbot)
아래 명령어를 사용하여 DNS-01 챌린지를 통해 인증서를 발급받는다.
sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini -d gitlab.woohahaapps.com
인증서 자동 갱신 설정
매일 동일한 시각에 인증서를 갱신하는 명령을 수행하기 위해서 cron job 을 등록한다.
cron 이 설치되어 있지 않은 경우라면 아래 명령어를 이용하여 설치한다.
sudo apt update
sudo apt install cron
cron 을 서비스로 등록하고, 재부팅시 자동으로 시작되도록 설정한다.
sudo systemctl enable cron
sudo systemctl start cron
아래 명령어로 cron job 을 등록하기 위한 편집창을 연다.
sudo crontab -e
편집창에 아래 job 명령을 등록한다.
0 0 * * * /usr/bin/certbot renew --quiet --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini --post-hook "sudo gitlab-ctl restart"
이제 매일 0시에 let's encrypt SSL 인증서를 갱신하는 job 이 동작한다.
위와 같이 DNS 에 연동하는 경우에는 인증서 발급 또는 갱신시에 포트 지정을 별도로 진행하지 않아도 된다.
'개발환경' 카테고리의 다른 글
[소셜로그인] Google 계정을 연동하여 회원가입/로그인 하기 위해 Google Cloud 설정하기 (0) | 2024.11.13 |
---|---|
React 프로젝트 생성 (macOS) (0) | 2024.11.08 |
[SpringBoot] FCM 메시지 발송 (0) | 2024.11.05 |
오랜만에 건드려보는 IntelliJ spring boot 프로젝트 (신규) (0) | 2024.10.30 |
AWS SES (Simple Email Service) (0) | 2024.10.30 |