Synology NASでWebサーバーを立ち上げ、LAN内でWANと同じURLでアクセスできるようにするためには、LAN内にSSL/TLS証明書を用意して常時SSLで通信できるようにする必要があります。Synology NASはSSL/TLS証明書による通信をサポートしているため、これを使ってSSL通信を簡単に実装できます。
さらにSynology NASはLet’s Encryptを使ったSSL/TLS証明書の発行と有効期限切れ前の自動更新もサポートしているので、SSL通信を実現するためにはこの機能を使う方法が一番手軽です。
しかし、Webサーバーを複数立ち上げる場合はその都度証明書を発行しなければなりません。SSL/TLS証明書はワイルドカードをサポートしているので、*.sabalog.comのようにワイルドカードでSSL/TLS証明書を発行すれば一つのSSL/TLS証明書で対応できます。しかし、Synology NASのLet’s Encryptでは独自ドメインのワイルドカード証明書の発行はサポートしていません。

また、Let’s EncryptでSSL/TSL証明書を発行・更新するためには、発行申請するURLでWAN側からNASに直接アクセスできる状態にしておく必要があります。このため、CloudflareのTunnelingを使用してサーバーにアクセスしている場合などWAN側からNASへのアクセスができないときはLet’s Encryptを利用できません。
このようにSynology NASでLet’s Encryptを使うためにはさまざまな制約があるため、制約を回避できない場合はSSL/TLS証明書は別の手段で発行・更新する必要があります。
ワイルドカード証明書の発行と適用
LAN向けのワイルドカード証明書はプライベート認証局を立てて自己署名したものを使うことができます。しかし、LANからアクセスするデバイスにCA証明書を手動でインストールしないと不正な証明書として認識されてしまい、表示に確認の一手間を要したりデバイスによってはアクセスできない場合もあります。また、異常検知にも影響するので可能な限り正規の証明書を使うべきです。
この異常状態を回避するため、無料認証局のサービスを利用してSSL/TLS証明書を発行し適用します。
ここではCloudflareに登録したドメインでワイルドカード証明書を発行し、自動更新する方法について解説します。Cloudflareへのドメインの登録方法は様々ですのでここでの説明は割愛します。
CloudflareのアカウントIDとAPIトークンを取得する
アカウントIDはドメイン管理画面の下の方に下記のような形で表示されています。これがアカウントIDになります。

APIトークンはマイプロフィールから取得します。

TLS/SSL証明書を発行する
Synology NASにSSHでログインして下記コマンドを実行します。
# --- Cloudflare 認証用設定 ---
export CF_Token=【APIトークン】
export CF_Account_ID=【アカウントID】
export CF_Email=【証明書に付与するメールアドレス】
export CF_Domain=【ワイルドカード証明書に付与するドメイン名】
# --- 実行処理 ---
sudo docker run --rm -it \
-v /volume1/docker/acme:/acme.sh \
-e CF_Token=$CF_Token \
-e CF_Account_ID=$CF_Account_ID \
-e CF_Email=$CF_Email \
neilpang/acme.sh \
--issue --dns dns_cf \
-d "$CF_Domain" -d "*.$CF_Domain" \
--server letsencryptすると鍵ファイル群が生成されます。下記はドメイン名にsabalog.comを指定した場合に生成されたファイルで、*.keyが秘密鍵、*.cerが公開鍵、*.caが中間証明書になります。

TLS/SSL証明書をインポートする
TLS/SSL証明書のインポートはDisk station上で”コントロールパネル>セキュリティ>証明書>追加”を選択し、証明書ファイルをインポートする際に下記のようにファイルを選択してOKを押せば、証明書が追加されます。


証明書の自動更新
前述のスクリプトで発行したSSL/TLS証明書は有効期限が三ヶ月後に設定されるため、三ヶ月ごとに更新する必要があります。この作業はSynology NASのタスクスケジューラーで自動化できます。
タスクを追加する際にユーザーを「root」、実行間隔を「1週間」、ユーザー指定のスクリプトに以下のコマンドラインを設定して保存します。
docker run --rm --net=host -v /volume1/docker/acme:/acme.sh neilpang/acme.sh --cron

動作確認
テスト実行をした時に下記のようなログが出力されていれば正しく動作しています。
[Thu Mar 12 13:01:33 UTC 2026] ===Starting cron===
[Thu Mar 12 13:01:34 UTC 2026] Already up to date!
[Thu Mar 12 13:01:34 UTC 2026] Upgrade successful!
[Thu Mar 12 13:01:34 UTC 2026] Automatically upgraded to: 3.1.3
[Thu Mar 12 13:01:34 UTC 2026] Renewing: 'sabalog.com'
[Thu Mar 12 13:01:34 UTC 2026] Renewing using Le_API=https://acme-v02.api.letsencrypt.org/directory
[Thu Mar 12 13:01:34 UTC 2026] Skipping. Next renewal time is: 2026-04-06T06:48:08Z
[Thu Mar 12 13:01:34 UTC 2026] Add '--force' to force renewal.
[Thu Mar 12 13:01:34 UTC 2026] Skipped sabalog.com_ecc
[Thu Mar 12 13:01:34 UTC 2026] ===End cron===実行ログは”コントロールパネル>タスクスケジューラー>設定>出力結果を保存”にチェックを入れることで出力されます。

ユーザースクリプトは、実行指定した時間が来るかタスク上で右クリックで表示されるメニューの”実行”を選択することで実行されます。

参考になれば幸いです。