Synology DSMでacme.shとCloudflare DNSを使ってLet’s Encrypt無料SSL証明書を発行し、自動更新する構成を表したカバー画像

概要

DSM を外部に直接公開する方式は危険なため、Tailscale、OpenVPN、WireGuard などの VPN の使用を推奨します。

外部アクセスを遮断しドメインをプライベート IP にマッピングした環境では、HTTP 認証方式での無料証明書登録が困難です。

この記事では Synology NAS(DSM)で acme.sh を使って Let’s Encrypt 無料 SSL 証明書を発行し、DSM に自動インストールする方法を整理します。


準備事項

  • ドメイン: 例)plzhans.com
  • DNS: Cloudflare 使用(推奨)
  • DSM 自動インストール用アカウント(2FA なしのアカウントが必要、下記参照)

Cloudflare API トークンの発行(最小権限)

セキュリティのため、特定ドメインに最小権限のみを付与したトークンを作成します。

最小必須権限

  • DNS: Read, Edit
  • Zone: Read

CloudflareでDNS Read・EditとZone Readの最小権限のみを付与してAPIトークンを作成する画面


証明書の発行(acme.sh

まずテストサーバーで確認

本番(Production)サーバーに繰り返しリクエストするとブロックされる可能性があります。成功サイクルが確立するまではテストサーバーを使用します。

  • --server letsencrypt_test
  • 発行には --issue オプションが必要です
 1#!/bin/bash
 2
 3export CF_Token="cloudflare_api_token"
 4
 5acme.sh \
 6  --server letsencrypt_test \
 7  --log --debug \
 8  --home ~/ssl \
 9  --issue \
10  --dns dns_cf \
11  -d "plzhans.com" \
12  -d "*.plzhans.com"

本番発行

1acme.sh \
2  --server letsencrypt \
3  --log --debug \
4  --home ~/ssl \
5  --issue \
6  --dns dns_cf \
7  -d "plzhans.com" \
8  -d "*.plzhans.com"

発行確認

1acme.sh \
2  --home ~/scripts/ssl \
3  --list
4
5# execute result
6# Main_Domain	KeyLength	SAN_Domains	CA	Created	Renew
7# plzhans.com	"ec-256"	*.plzhans.com	LetsEncrypt.org	2026-05-15T04:59:58Z	2026-07-13T04:59:58Z

参考

  • 使用したトークン情報は account.conf ファイルに保存されます
  • ドメイン設定は例)~/ssl/plzhans.com_ecc/plzhans.com.conf に保存されます

発行した証明書を DSM にインストール(deploy-hook)

acme.sh は deploy-hook として synology_dsm をサポートしています。

  • DSM に証明書がない場合、SYNO_Create="1" の値が必要です
  • テスト証明書がすでに発行されている場合、削除するか --force オプションが必要になることがあります

既存証明書の削除(必要な場合)

1acme.sh --remove --home ~/ssl -d "plzhans.com"

DSM 自動インストールスクリプトの例

 1#!/bin/bash
 2
 3# syno server
 4export SYNO_Hostname="localhost"
 5export SYNO_Scheme="https"
 6export SYNO_Port="5001"
 7
 8# syno account
 9export SYNO_Username='system-script'
10export SYNO_Password='secret'
11
12export SYNO_Create="1"
13
14acme.sh \
15  --deploy \
16  --insecure \
17  --home ~/ssl \
18  --log --debug \
19  --deploy-hook synology_dsm \
20  -d "plzhans.com"
21
22# execute result
23# ...
24# ret='0'
25# Success

問題発生: 2FA で自動化がブロックされる場合

SYNO_Username アカウントに 2FA が適用されていると、自動化の妨げになります。

解決策

  • 別のアカウントを作成します(管理者アカウントが必要)
  • 自動化用の最小セキュリティ対策で運用します
    • 外部アクセス不可
    • 必要な権限のみ付与
  • そのアカウントの 2FA を無効化します

DSM 確認

DSMのユーザー設定で自動化用アカウントの2FAが無効になっていることを確認する画面


FAQ: ホスト名/証明書マッチングの問題

外部アクセスが遮断されて代表ドメインでのアクセスが不可能な場合(例: wee-home.synology.me)、証明書マッチング失敗によりエラーが発生する可能性があります。コマンドの実行時に https://{Hostname}:{port} でアクセスするためです。

3 つの解決策から 1 つを選択

  1. SYNO_Hostname を実際にアクセス可能な有効な証明書のドメインに指定します
  2. /etc/hosts ファイルにドメインを記述して DNS クエリをバイパスし、127.0.0.1 に接続します
  3. http 方式を使用します

参考