
Synology NAS SSL acme.sh Let's Encrypt 리버스 프록시 홈서버 HTTPS
🔒 브라우저의 “주의 요함” 경고, 이제 없애볼까요?
홈서버를 운영하다 보면 한 번쯤은 마주치는 그 빨간 경고 — “주의 요함(Not Secure)”. 위키, 프로젝트 관리 도구, 코드 서버 같은 셀프호스팅 서비스를 외부에서 접속할 때마다 브라우저가 보여주는 이 경고가 정말 거슬리죠. 단순히 보기 싫은 것뿐 아니라, HTTP 통신은 평문 전송이라 비밀번호나 세션 쿠키가 그대로 노출될 수 있어서 보안상으로도 위험해요.
오늘은 Synology NAS SSL 인증서를 acme.sh와 Let’s Encrypt로 무료 발급하고, 리버스 프록시까지 설정해서 홈서버 전체에 HTTPS를 적용하는 방법을 단계별로 정리해볼게요. 90일마다 자동 갱신까지 되니까, 한 번 설정하면 거의 신경 쓸 필요 없어요!
🏗️ 전체 아키텍처 — NAS가 관문이에요
먼저 큰 그림부터 볼게요. 핵심 컨셉은 간단해요 — Synology NAS를 HTTPS 관문(단일 진입점)으로 쓰는 거예요.
HTTPS 암호화/복호화를 NAS에서 처리하고, 내부 LAN에서는 평문 HTTP로 통신하는 방식이에요. 백엔드 서버에 개별 인증서를 설치할 필요가 없어요.
| 구성 요소 | 역할 | 예시 |
|---|---|---|
| 공인 IP:443 | 외부 HTTPS 진입점 | 라우터 → NAS로 포워딩 |
| Synology NAS | nginx 리버스 프록시 + SSL 종료 | 192.168.1.100 |
| 백엔드 서버 A | 위키, PM 도구 등 | 192.168.1.10:8080, :9090 |
| 백엔드 서버 B | 코드 서버 등 | 192.168.1.20:5555 |
외부에서 wiki.example.com으로 접속하면 라우터가 NAS로 넘기고, NAS의 nginx가 Host 헤더를 보고 알맞은 백엔드 서버로 라우팅해요. SSL 인증서는 NAS 한 곳에서만 관리하면 돼요.

📋 사전 준비물
- 도메인 — Namecheap, Cloudflare, GoDaddy 등에서 연간 ~$10에 구매 가능해요
- Synology NAS — DSM 7.x 이상
- 라우터 — 포트 포워딩 지원
- 홈서버 — 노출하고 싶은 서비스가 하나 이상
- 고정 공인 IP 또는 DDNS 서비스
🛠️ Step 1 — 도메인 & DNS 설정
도메인을 구매한 뒤, DNS 레코드를 설정해요. 모든 서브도메인이 같은 공인 IP를 가리키면 돼요.
| Hostname | Type | Value |
|---|---|---|
| example.com | A | YOUR_PUBLIC_IP |
| wiki.example.com | A | YOUR_PUBLIC_IP |
| pm.example.com | A | YOUR_PUBLIC_IP |
| code.example.com | A | YOUR_PUBLIC_IP |
전부 같은 IP를 가리키는 게 맞아요. NAS 리버스 프록시가 Host 헤더로 구분하니까요.
🔀 Step 2 — 라우터 포트 포워딩
라우터에서 외부 포트를 NAS로 전달하는 규칙을 만들어요.
| 외부 포트 | 내부 목적지 | 용도 |
|---|---|---|
| 443 | NAS_IP:443 | HTTPS (리버스 프록시) |
| 80 | NAS_IP:80 | HTTP (Let’s Encrypt 검증용) |
| 2222 | NAS_IP:22 | SSH 접근 |
일부 ISP는 가정용 회선에서 80번 포트를 막아요. 이 경우 webroot 방식 대신 DNS-01 챌린지를 사용해야 해요. Cloudflare DNS API 등을 활용하면 80번 포트 없이도 인증서를 발급받을 수 있어요.
📦 Step 3 — acme.sh 설치
NAS에 SSH로 접속해서 acme.sh를 설치해요.
# NAS에 SSH 접속
ssh -p 2222 admin@your-nas-ip
# acme.sh 설치
wget -O - https://get.acme.sh | sh
# Let's Encrypt 계정 등록
~/.acme.sh/acme.sh \
--register-account \
-m your-email@example.com
설치가 끝나면 ~/.acme.sh/ 디렉토리에 실행 파일과 설정이 생겨요.
📜 Step 4 — SSL 인증서 발급 (멀티 도메인)
하나의 인증서로 여러 서브도메인을 커버할 수 있어요. -d 플래그를 여러 개 써서 SAN(Subject Alternative Name) 인증서를 발급받아요.
sudo ~/.acme.sh/acme.sh \
--issue \
-d wiki.example.com \
-d pm.example.com \
-d code.example.com \
-w /var/lib/letsencrypt \
--keylength ec-256
--keylength ec-256 옵션은 RSA 대신 ECC(타원 곡선) 인증서를 발급해요. 키 크기가 작고, TLS 핸드셰이크가 빠르며, 보안 강도도 RSA-2048 이상이에요. 2024년 이후 트렌드는 확실히 ECC쪽이에요.
🚀 Step 5 — Synology DSM에 인증서 배포
acme.sh에는 Synology 전용 배포 훅(synology_dsm)이 내장되어 있어요. 발급된 인증서를 DSM 인증서 관리자로 자동 임포트해줘요.
sudo SYNO_Username=admin \
SYNO_Password="your-password" \
SYNO_Scheme=http \
SYNO_Hostname=localhost \
SYNO_Port=5000 \
SYNO_Certificate="my-ssl-cert" \
~/.acme.sh/acme.sh \
--deploy \
-d wiki.example.com \
-d pm.example.com \
-d code.example.com \
--deploy-hook synology_dsm
위 명령에서 비밀번호가 평문으로 노출돼요. 실제 운영 시에는 환경 변수 파일로 분리하거나, DSM 2FA가 활성화된 경우 앱 비밀번호를 사용하세요.
배포가 성공하면 DSM → 제어판 → 보안 → 인증서에서 새 인증서를 확인할 수 있어요.

🔄 Step 6 — DSM 리버스 프록시 설정
DSM → 제어판 → 로그인 포털 → 고급 → 역방향 프록시에서 서비스별 규칙을 만들어요.
| 규칙 이름 | 소스 (HTTPS) | 목적지 (HTTP) |
|---|---|---|
| wiki | wiki.example.com:443 | 192.168.1.10:8080 |
| pm | pm.example.com:443 | 192.168.1.10:9090 |
| code | code.example.com:443 | 192.168.1.20:5555 |
규칙을 만든 뒤, 제어판 → 보안 → 인증서 → 설정에서 각 리버스 프록시 규칙에 방금 배포한 SSL 인증서를 할당해요.
🔃 Step 7 — nginx 리로드
설정을 변경한 뒤에는 nginx를 리로드해야 적용돼요.
# nginx 설정 재생성
sudo /usr/syno/bin/synow3tool \
--gen-all
# nginx 리로드 (무중단)
sudo nginx -s reload
# 설정 유효성 검사
sudo nginx -t
nginx -t에서 syntax is ok가 나오면 성공이에요. 이제 브라우저에서 https://wiki.example.com에 접속하면 초록 자물쇠가 보일 거예요!
⏰ Step 8 — 자동 갱신 설정
Let’s Encrypt 인증서는 90일 유효기간이지만, acme.sh가 60일마다 자동 갱신하는 크론잡을 설치해요. 확인해볼까요?
# 크론잡 확인
crontab -l | grep acme
수동으로 갱신 + 배포가 필요하다면 이렇게 해요.
# 인증서 갱신
sudo ~/.acme.sh/acme.sh --renew \
-d wiki.example.com \
-d pm.example.com \
-d code.example.com
# DSM에 재배포
sudo SYNO_Username=admin \
SYNO_Password="your-password" \
SYNO_Scheme=http \
SYNO_Hostname=localhost \
SYNO_Port=5000 \
SYNO_Certificate="my-ssl-cert" \
~/.acme.sh/acme.sh \
--deploy \
-d wiki.example.com \
-d pm.example.com \
-d code.example.com \
--deploy-hook synology_dsm
# nginx 리로드
sudo /usr/syno/bin/synow3tool \
--gen-all && sudo nginx -s reload
하지만 보통은 크론잡이 알아서 해주니까, 직접 실행할 일은 거의 없어요.
🔧 트러블슈팅 — 자주 만나는 문제들
| 문제 | 원인 | 해결 |
|---|---|---|
| Port 80 차단 | ISP 정책 | DNS-01 챌린지 사용 (Cloudflare API 등) |
| 갱신 후 인증서 미적용 | nginx reload 누락 | synow3tool --gen-all + nginx -s reload |
| 브라우저에 옛날 인증서 | 캐시 | 브라우저 캐시 삭제 또는 DSM 인증서 할당 확인 |
| Let’s Encrypt 속도 제한 | 주당 5개 중복 인증서 | 테스트 시 --staging 서버 사용 |
| 새 서브도메인 추가 | — | DNS A 레코드 추가 → -d 플래그 추가 후 재발급 → 배포 → RP 규칙 추가 |
🛡️ 보안 모범 사례
- DSM을 직접 인터넷에 노출하지 마세요 — 반드시 리버스 프록시나 VPN을 거쳐야 해요
- SSH 키 인증을 사용하세요 — 비밀번호 로그인보다 훨씬 안전해요
- DSM 정기 업데이트 — Synology는 보안 패치를 자주 배포해요
- 2FA 활성화 — DSM 관리자 계정에 필수예요
- 방화벽 규칙 — 80(ACME), 443(HTTPS), SSH 포트만 열어두세요
- ECC 인증서(ec-256) 사용 — 성능과 보안 모두 우수해요

📚 참고 자료
- acme.sh 공식 GitHub — 설치 및 사용법 전체 문서
- acme.sh Synology NAS 가이드 — synology_dsm 배포 훅 상세 설명
- Let’s Encrypt 공식 문서 — 인증서 정책, 속도 제한, FAQ
- Synology DSM 인증서 관리 — DSM 7.x 공식 도움말
- BookStack 위키 셀프호스팅 가이드 — 같은 인프라 위에 위키를 올리는 방법 (관련 포스트)
✅ 마무리
정리하면, Synology NAS SSL 설정의 핵심은 딱 세 가지예요 — acme.sh로 인증서 발급, synology_dsm 훅으로 배포, 리버스 프록시로 서비스 라우팅. 이 세 가지만 이해하면 서브도메인이 몇 개가 되든 같은 패턴으로 확장할 수 있어요.
한 번 설정해두면 60일마다 acme.sh가 알아서 갱신하고 재배포까지 해주니까, 진짜 “설정하고 잊어도 되는(set-and-forget)” 시스템이에요. 홈서버에 초록 자물쇠가 뜨는 순간의 뿌듯함, 직접 경험해보세요! 💚