Synology NASでワイルドカードSSLを自動更新する

freenom+Cloudflare+Synology NASでhttps 独自ドメイン運用 (Let’s Encrypt ワイルドカードSSL対応) CloudFlare DDNS をスクリプトで自動更新 Synology NAS

以前の記事では、Synology NASで独自ドメインでのWordpress運用、そしてLet’s EncryptによるSSL証明書の取得まで行いました。

今回は、手動で行っていたワイルドカードSSL証明書を自動で取得する方法を紹介します。

実行する前には必ずバックアップをして、システムが停止するリスクがあることを理解したうえでお願いします。バージョンによって方法が変わっている場合もあります。

Synology NASのDSMファームウェアが、ACME v2 (ワイルドカード証明書)に対応するまでのその場しのぎの方法なので、こんな方法もあるのかという程度の参考にするのが良いと思います。力技なので動作の保証はできません。

.shスクリプトの修正

DSM 6.2ではここにSSL証明書が保管されます。

/usr/syno/etc/certificate/_archive

いくつかディレクトリがありますが、システムデフォルトのSSL証明書はDEFAULTファイルに記述されています。

SSH
#cat /usr/syno/etc/certificate/_archive/DEFAULT

 

このファイルに、「xjr46m」と書いてあれば、

「/usr/syno/etc/certificate/_archive/xjr46m

にデフォルトとなる元のSSLが格納されているということです。

スクリプトを実行したときにここの既存証明書を更新するようにします。

ちなみに、ここにデフォルト指定されたSSL証明書がコピーされて保存されています。

/usr/syno/etc/certificate/system/default

acme.shのパスを修正する

https://github.com/Neilpang/acme.sh

acme.shには証明書を保存するパスを指定する箇所があるので修正します。

 必要なのは3つのファイルなのでこの3つのみ移動するようにします。
privkey.pem秘密鍵
cert.pem証明書
chain.pem中間証明書

[デフォルトのSSLディレクトリ]とは先程の「xjr46m」のようなディレクトリ名に修正して記述します。

SSH
$sudo -i
#cd /root/
#cp acme.sh autoupdate-acme.sh
#vi /root/autoupdate-acme.sh

:2455で指定行へ移動

2455行付近
CERT_KEY_PATH=”/usr/syno/etc/certificate/_archive/[デフォルトのSSLディレクトリ]/privkey.pem”

2461行付近
CA_CERT_PATH=”/usr/syno/etc/certificate/_archive[デフォルトのSSLディレクトリ]/chain.pem”
2664行付近
CERT_FULLCHAIN_PATH=”/usr/syno/etc/certificate/_archive[デフォルトのSSLディレクトリ]/cert.pem”

3ヶ所修正したら保存します。

ホームページ作成サービス「グーペ」

動作確認

sampledomain.tkは自分の所有ドメイン名に変更

SSHでログイン

SSH
$sudo -i
#./autoupdate-acme.sh --force --renew -d *.sampledomain.tk -d sampledomain.tk --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please \
--reloadcmd "/usr/syno/sbin/synoservicectl --reload nginx" \
--dnssleep 20

自動でnginxが再起動されます。SSL証明書の更新を確認するには、
DSMのコントロールパネルの「セキュリティ」、「証明書」を見ます。
90日後に更新期限が延長されていれば成功です。

Let’s Encryptでは同一証明書の発行を週5枚までに制限しているようなので注意してください。

https://letsencrypt.org/docs/rate-limits/

We also have a Duplicate Certificate limit of 5 certificates per week. A certificate is considered a duplicate of an earlier certificate if they contain the exact same set of hostnames, ignoring capitalization and ordering of hostnames.

以下で最近の証明書発行状況を確認できます。

https://crt.sh/

ネームサーバーのDNSレコード(TXT)を設定していない場合は以下に記載していますので参考にしてください。

freenom+Cloudflare+Synology NASでhttps 独自ドメイン運用 (Let’s Encrypt ワイルドカードSSL対応)

あとは、cronに登録して、定時に実行するよう指定します。



crontabに登録

SSH
#vi /etc/crontab

毎日0時30分(任意の時間)に更新するよう設定して保存。

vi
30 00 * * * root /root/autoupdate-acme.sh --force --renew -d *.sampledomain.tk -d sampledomain.tk --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please --reloadcmd "/usr/syno/sbin/synoservicectl --reload nginx" --dnssleep 20

cronを再起動

SSH
#synoservicecfg --restart crond

数日放置して更新できていたら、crontabを編集して週一回の更新にするよう修正した方がよいと思います。

以上で設定は終わりです。おつかれさまでした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です