HTTPS 적용하려 Let's Encrypt 인증서를 사용하려고 합니다.
검색해 보니 굳이 유료 인증서 사용을 하지 않아도 될 듯하더군요.
자동 갱신, DNS 인증 방식, 와일드카드 인증서 등의 방법이 다양하던데
실제 운영 중이신 분들은 어떤 방식으로 구성하고 계신지 궁금해
아렇게 검색으로 방문하여 질문을 드리게 됬습니다.
자체 서버 환경에서 운영 시 주의할 점
등의 실제 '운영 사례나 구성' 조언 부탁드립니다.
감사합니다.
답변 4개 / 댓글 1개
외부 도메인
-Nginx Reverse Proxy
-내부 Apache/PHP 그누보드 서버
구성으로
인증서는 유료 인증서 없이 Let's Encrypt로 충분했고
certbot으로 발급했습니다.
자동 갱신은 certbot renew와 Nginx reload hook을 걸어두는 방식으로 구성했습니다.
주의할점은
80/443 포트가 외부에서 정상 접근 가능한지.
프록시 구조라면 실제 인증서는 앞단 Nginx에서 관리하는 게 편함
인증서 갱신 후 nginx reload가 자동으로 되도록 설정
와일드카드는 DNS 인증이 필요해서 단일 도메인이면 HTTP 인증 방식이 더 단순함
이정도입니다.
답변에 대한 댓글 1개
DVA, 애애드프로 님 말씀이 정확합니다. 요즘 우분투는 certbot이 systemd timer로 자동 갱신을 등록해줘서 따로 cron 안 넣어도 됩니다. 다만 질문자님이 crontab 방식까지 명시하셨으니 순서대로 정리해 드립니다.
1. 아파치 도메인 설정 및 연결 확인
먼저 도메인 A레코드가 서버 공인 IP를 가리키는지 확인합니다.
bash
dig +short example.com
VirtualHost를 잡습니다. `/etc/apache2/sites-available/example.com.conf`:
apache
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/gnuboard
</VirtualHost>
bash
a2ensite example.com.conf
systemctl reload apache2
브라우저로 `http://example.com` 들어가서 그누보드가 정상으로 뜨는지 먼저 확인합니다. 이게 안 되면 SSL부터 넣어봐야 소용없습니다.
2. Certbot 설치
bash
apt update
apt install certbot python3-certbot-apache
3. certbot으로 인증서 발급
아파치 플러그인이 VirtualHost를 읽고 자동으로 잡아줍니다.
bash
certbot --apache -d example.com -d www.example.com
이메일 입력하고, 리다이렉트 여부 물어보면 2번(HTTP→HTTPS 강제 리다이렉트)을 고르면 됩니다.
4. SSL 설정 확인
플러그인이 `example.com-le-ssl.conf`를 자동 생성하고 443 VirtualHost와 인증서 경로를 다 넣어줍니다. 직접 확인/수정하려면 그 파일에서 아래가 들어가 있는지 보시면 됩니다.
apache
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
5. 접속 테스트
bash
systemctl reload apache2
브라우저로 `https://example.com` 접속, 자물쇠 확인. 그누보드는 추가로 `data/config.php`에서 도메인이 https로 잡히는지, 혼합 콘텐츠(이미지·링크가 http로 나오는 것) 경고 없는지 확인하세요. 외부 검증은 SSL Labs(ssllabs.com/ssltest)에서 A 등급 나오는지 보면 깔끔합니다.
6. 자동 갱신 — crontab 방식
DVA 님 말씀대로 요즘은 설치만 해도 자동입니다. 먼저 확인부터.
bash
systemctl list-timers | grep certbot
certbot renew --dry-run
timer가 이미 등록돼 있으면 crontab은 굳이 안 넣어도 됩니다. 그래도 명시적으로 cron에 넣고 싶으시면:
bash
crontab -e
cron
0 3 * * * /usr/bin/certbot renew --quiet --deploy-hook "systemctl reload apache2"
새벽 3시에 갱신 체크하고, 갱신되면 아파치를 reload해서 새 인증서를 다시 읽게 하는 설정입니다. `--deploy-hook`이 핵심인데, 갱신만 되고 reload를 안 하면 만료 직전 인증서를 계속 물고 있는 사고가 납니다.
한 가지 주의 — 앞단에 Nginx 리버스 프록시를 두는 구조라면, 인증서는 앞단 Nginx에서 발급·관리하고 내부 아파치는 http로 받는 게 훨씬 깔끔합니다. 그 경우 위 명령에서 `--apache` 대신 `--nginx`(또는 webroot 방식)를 쓰고, 아파치 쪽엔 SSL을 안 거셔도 됩니다. 단일 서버에 아파치만 있다면 위 순서 그대로 가시면 됩니다.
자동 갱신 잘 도는지 한 번 `--dry-run`으로 확인해두는 것만 잊지 마세요. 그게 90일 뒤 사이트 멈추는 사고를 막아줍니다.
저도 처음에 쳇GPT에게 물어서 설치했고 지금은 도사(?)가 되었습니다.^^
라눅스에 let's ssl 설치 방법을 자세히 알려주세요.
아파치 도메인 설정 및 연결확인
Certbot 설치
certbot으로 인증서 발급
SSL 설정
접속 테스트
crontab에 자동 업데이트 설정
답변을 작성하려면 로그인이 필요합니다.
감사합니다.