
시놀로지 NAS에 HTTPS로 접속할 때 “연결이 비공개로 설정되어 있지 않습니다” 경고를 본 적 있으신가요? 이 오류는 NAS의 SSL 인증서를 브라우저가 신뢰하지 못할 때 발생합니다. 이 글에서는 기본적인 해결 방법부터, 여러 서브도메인을 한 번에 커버하는 와일드카드 SSL 설정까지 단계별로 정리합니다.
‘연결이 비공개로 설정되어 있지 않습니다’ — 왜 뜨는 걸까
시놀로지 NAS는 초기 설치 시 자체 서명(self-signed) 인증서를 사용합니다. 이 인증서는 공인 인증기관이 발급한 것이 아니기 때문에 모든 브라우저에서 경고가 발생합니다.
이 외에도 다음과 같은 상황에서 같은 오류가 나타납니다.
- 인증서 만료 — Let’s Encrypt 인증서(90일)가 자동 갱신에 실패한 경우
- 도메인 불일치 — 인증서는 도메인으로 발급했는데 IP 주소로 접속한 경우
- 서비스 미매핑 — 인증서를 발급했지만 해당 서비스에 연결하지 않은 경우
빠른 해결: DSM에서 Let’s Encrypt 인증서 발급
서브도메인 하나만 사용하는 경우, DSM 기본 기능으로 충분합니다.
- DSM → 제어판 → 보안 → 인증서
- 추가 → “새 인증서 추가” → “Let’s Encrypt에서 인증서 가져오기”
- 도메인 입력 (예:
yourname.synology.me) - “기본 인증서로 설정” 체크 → 완료
조건: 외부에서 NAS 80번 포트로 접근 가능해야 합니다(공유기 포트포워딩 필수). 도메인이 없다면 DSM → 제어판 → 외부 액세스 → DDNS에서 Synology 무료 DDNS를 먼저 등록합니다.
| 상황 | 원인 | 해결 |
|---|---|---|
| NAS 처음 설치 후 HTTPS 접속 | 자체 서명 인증서 | Let’s Encrypt 발급 |
| 잘 되다가 갑자기 경고 | 인증서 만료 | 인증서 갱신 + 포트포워딩 확인 |
| 도메인으로는 되는데 IP로 안 됨 | 도메인 불일치 | 도메인으로 접속하거나 HTTP 사용 |
| 특정 서비스만 경고 | 인증서 미매핑 | 인증서 설정에서 서비스별 매핑 |
| 내부망 전용 사용 | 공인 인증서 발급 불가 | HTTP 사용 또는 예외 등록 |
좀 더 자세한 내용은 아래 포스팅을 참고하세요.
여기까지가 일반적인 해결 방법입니다. 그런데 NAS에서 blog, cloud, photo 같은 서브도메인을 여러 개 운영하고 있다면, 서브도메인마다 인증서를 개별 발급해야 하는 문제가 남습니다.
서브도메인이 여러 개라면 — 와일드카드 SSL이 답
DSM 기본 Let’s Encrypt는 와일드카드 인증서(*.도메인)를 지원하지 않습니다. 서브도메인이 늘어날수록 인증서도 하나씩 늘어나고, 관리가 복잡해집니다.
해결: Cloudflare 무료 DNS + acme.sh 조합으로 와일드카드 인증서를 한 번만 발급하면, 서브도메인을 아무리 추가해도 인증서는 하나로 충분합니다.
전체 구성도
[사용자 브라우저]
↓ HTTPS
[Cloudflare CDN/프록시] ← 루트 도메인, www, 개별 서브도메인
↓ HTTPS (Full 모드)
[공유기 포트포워딩] ← 443 → NAS
↓
[Synology NAS nginx]
├─ DSM 역방향 프록시 (개별 서브도메인)
└─ 커스텀 server block (와일드카드 매칭)
핵심 흐름:
- 도메인(카페24 등) → Cloudflare 네임서버로 이전
- DNS: CNAME → Synology DDNS 주소 (유동 IP 대응)
- SSL: Cloudflare 프록시(루트) + acme.sh 와일드카드(서브도메인)
- NAS: DSM 역방향 프록시 + 필요 시 커스텀 nginx 설정
Step 1. Cloudflare 가입 및 도메인 추가
Cloudflare 대시보드에서 무료 플랜으로 가입한 뒤 도메인을 추가합니다. 도메인을 추가하면 기존 DNS 레코드를 자동으로 스캔합니다.
DNS 레코드 설정

| 타입 | 이름 | 대상 | 프록시 |
|---|---|---|---|
| CNAME | @ | yourname.synology.me | 프록시됨 (주황 구름) |
| CNAME | * | yourname.synology.me | DNS 전용 (회색 구름) |
| CNAME | www | yourname.synology.me | 프록시됨 (주황 구름) |
| CNAME | blog | yourname.synology.me | 프록시됨 (주황 구름) |
주의사항:
- 와일드카드(
*) 레코드는 무료 플랜에서 프록시를 사용할 수 없습니다. 반드시 “DNS 전용(회색 구름)”으로 설정합니다. - 프록시를 쓰려면 서브도메인을 개별 CNAME으로 등록합니다.
- 루트 도메인(
@)에 CNAME을 쓰면 A 레코드는 등록할 수 없습니다 (DNS 표준 충돌). Cloudflare는 루트 CNAME을 자동으로 플랫닝 처리합니다. - 유동 IP 환경에서는 A 레코드 대신 반드시 Synology DDNS CNAME을 사용합니다.
Step 2. 도메인 등록기관에서 네임서버 변경





카페24 등 도메인을 구매한 곳에서 네임서버를 Cloudflare로 변경합니다.
- 도메인 관리 → 네임서버 설정
- 기존 네임서버(ns1.cafe24.com 등) 삭제
- Cloudflare가 안내한 네임서버 2개 입력
반영까지 보통 1~2시간 소요됩니다(최대 24시간). Cloudflare 대시보드에서 “Active” 상태로 바뀌면 완료입니다.
Step 3. Cloudflare SSL 암호화 모드 설정

Cloudflare 대시보드 → SSL/TLS → 개요에서 암호화 모드를 설정합니다.
| 모드 | 브라우저↔CF | CF↔NAS | NAS 인증서 요건 |
|---|---|---|---|
| Flexible | HTTPS | HTTP (평문) | 불필요 |
| Full | HTTPS | HTTPS | 자체서명 OK |
| Full (Strict) | HTTPS | HTTPS | 공인 인증서 필수 |
권장: Full — NAS에 자체서명 인증서라도 HTTPS가 켜져 있다면 Full을 선택합니다. acme.sh로 인증서 발급 후에는 Full (Strict)로 변경해도 됩니다.
Step 4. Cloudflare API 토큰 생성


acme.sh가 DNS 인증을 자동으로 처리하려면 Cloudflare API 토큰이 필요합니다.
- Cloudflare 대시보드 → My Profile → API Tokens
- “Create Token” 클릭
- “Edit zone DNS” 템플릿 선택
- Zone Resources → 해당 도메인 선택
- IP 필터링, TTL은 비워둡니다
- “Create Token” → 생성된 토큰 복사
이 토큰은 이후 acme.sh에서 DNS 레코드를 추가/삭제하는 데 사용됩니다. 안전한 곳에 보관하세요.
Step 5. NAS에서 acme.sh 설치
SSH로 NAS에 접속합니다. root 권한이 필요합니다.
ssh admin@NAS_IP -p 22
sudo -i
acme.sh를 설치합니다:
curl https://get.acme.sh | sh -s [email protected] --force
--force 옵션이 필수입니다. 시놀로지 DSM은 표준 crontab이 없어서 이 옵션 없이는 설치가 중단됩니다.
설치 완료 후 경로 확인:
ls /root/.acme.sh/acme.sh
Step 6. 와일드카드 인증서 발급
Cloudflare API 토큰을 환경변수로 설정한 뒤 인증서를 발급합니다.
export CF_Token="여기에_API_토큰_붙여넣기"
/root/.acme.sh/acme.sh --issue \
-d "yourdomain.co.kr" \
-d "*.yourdomain.co.kr" \
--dns dns_cf \
--server letsencrypt
실행 과정:
- acme.sh가 Cloudflare DNS API로
_acme-challengeTXT 레코드를 자동 추가 - Let’s Encrypt가 TXT 레코드를 확인하여 도메인 소유권 검증
- 인증서 발급 완료
- TXT 레코드 자동 삭제
발급된 인증서 위치:
/root/.acme.sh/yourdomain.co.kr_ecc/
├── fullchain.cer (인증서 + 중간 인증서)
├── yourdomain.co.kr.key (개인키)
└── ca.cer (CA 인증서)
정상 발급되면 “Cert success” 메시지가 출력됩니다.
Step 7. DSM에 인증서 배포
발급한 인증서를 DSM 인증서 관리에 등록합니다. acme.sh의 synology_dsm deploy hook을 사용합니다.
export SYNO_Username="admin"
export SYNO_Password='비밀번호 여기'
export SYNO_Scheme="https"
export SYNO_Hostname="localhost"
export SYNO_Port="5001"
/root/.acme.sh/acme.sh --deploy \
-d "yourdomain.co.kr" \
--deploy-hook synology_dsm \
--insecure
주의: 비밀번호에 느낌표(!)나 특수문자가 있으면 반드시 작은따옴표(')로 감쌉니다. 쌍따옴표는 bash가 !를 히스토리 확장으로 해석합니다.
배포 완료 후 확인:
- DSM → 제어판 → 보안 → 인증서
- 새 인증서가 등록되어 있는지 확인
- 해당 인증서를 “기본 인증서”로 설정
Step 8. 자동 갱신 설정
Let’s Encrypt 인증서는 90일마다 만료됩니다. 갱신을 잊으면 다시 “연결이 비공개로 설정되어 있지 않습니다” 오류가 발생합니다. DSM 작업 스케줄러로 자동화합니다.
환경변수 파일 분리 (보안)
cat > /root/.acme.sh/synology.env << 'EOF'
export CF_Token="Cloudflare_API_토큰"
export SYNO_Username="admin"
export SYNO_Password='DSM_비밀번호'
export SYNO_Scheme="https"
export SYNO_Hostname="localhost"
export SYNO_Port="5001"
EOF
chmod 600 /root/.acme.sh/synology.env
DSM 작업 스케줄러 설정
- DSM → 제어판 → 작업 스케줄러 → 생성 → 예약된 작업 → 사용자 정의 스크립트
- 사용자: root
- 일정: 매월 1일
- 스크립트 내용은 아래와 같습니다:

source /root/.acme.sh/synology.env
/root/.acme.sh/acme.sh --cron --home /root/.acme.sh
/root/.acme.sh/acme.sh --deploy -d "yourdomain.co.kr" --deploy-hook synology_dsm --insecure
nginx -s reload
매월 자동으로 인증서 갱신 여부를 확인하고, 갱신이 필요하면 발급 후 DSM에 배포합니다.
Step 9. nginx 커스텀 서버 블록 (선택)
DSM 역방향 프록시는 고정 호스트명만 지원합니다. 와일드카드 패턴 매칭이 필요한 경우 커스텀 nginx 설정을 추가합니다.
server {
listen 443 ssl;
server_name ~^(?<subdomain>.+)\.yourdomain\.co\.kr$;
ssl_certificate /path/to/fullchain.cer;
ssl_certificate_key /path/to/yourdomain.co.kr.key;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
인증서 경로 찾기: DSM이 인증서를 저장하는 실제 경로는 아래 명령으로 확인합니다:
find /usr/syno/etc/certificate/_archive -name "fullchain*" -exec ls -la {} \;
설정 적용:
nginx -t && nginx -s reload
nginx -t에서 “syntax is ok” 메시지가 나오면 정상입니다.
트러블슈팅
acme.sh 설치 시 “crontab doesn’t exist” 오류

시놀로지 DSM은 표준 crontab을 사용하지 않습니다. --force 옵션을 추가합니다.
curl https://get.acme.sh | sh -s [email protected] --force
DSM deploy 시 “SYNO_USERNAME and SYNO_PASSWORD” 오류
환경변수가 현재 세션에 export되어 있어야 합니다. deploy 명령 전에 반드시 export를 실행합니다.
비밀번호에 특수문자(!) 포함 시 오류
쌍따옴표 대신 작은따옴표를 사용합니다:
# 잘못된 예 (! 해석됨)
export SYNO_Password="MyPass!123"
# 올바른 예
export SYNO_Password='MyPass!123'
nginx 인증서 경로 “not found”
/usr/syno/etc/certificate/system/default/는 DSM 기본 인증서 경로입니다. acme.sh로 배포한 인증서는 _archive 아래에 있습니다:
ls /usr/syno/etc/certificate/_archive/
해시값 폴더 안에 fullchain.pem, privkey.pem이 있습니다.
DSM 웹스테이션과 역방향 프록시 충돌
같은 호스트명을 웹스테이션과 역방향 프록시에 동시에 등록할 수 없습니다. 서비스별로 서브도메인을 분리해서 사용합니다.
최종 결과 요약
| 항목 | 구성 |
|---|---|
| 루트 도메인 | Cloudflare 프록시 → 자동 HTTPS |
| 와일드카드 서브도메인 | acme.sh + Let’s Encrypt 와일드카드 인증서 |
| 유동 IP 대응 | Synology DDNS + CNAME |
| 인증서 갱신 | DSM 작업 스케줄러 (매월 자동) |
| 서브도메인 추가 | Cloudflare DNS에 CNAME 추가만으로 즉시 동작 |
이 구성이 완료되면 서브도메인을 추가할 때마다 인증서를 다시 발급할 필요가 없습니다. Cloudflare DNS에 CNAME 레코드 하나만 추가하면 자동으로 HTTPS가 적용되고, “연결이 비공개로 설정되어 있지 않습니다” 경고 없이 정상 접속됩니다.

NAS 인증서 설정이나 서브도메인 구성에서 막히는 부분이 있다면 상담 문의를 통해 원격 지원을 요청하실 수 있습니다.
