目次

LetsEncryptの導入

はじめに

QNAPに構築したWebサーバにSSL証明書(Let's Encrypt)を導入する手順を記載する。

事前準備

前提

80portと443portで疎通可能なWebサーバが構築済みなこと

設定するドメインに対して、QNAPから名前解決及び疎通可能なこと

名前解決できない場合は、/etc/hostsに設定するドメイン名とQNAPのIPアドレスを記載します。
※ここ大事です、気づかずはまりました。

opkgからgit及びgit-httpがインストール済みなこと

こちらのサイトを参考にしてください。

AppCenterから、Python3(3.5)がインストール済みなこと

導入手順

こちらのサイトの解説になります。
GitHubにある、qnap-letsencryptというツールを利用しています。

qnap-letsencryptのダウンロード

mkdir qnap-letsencrypt

curl --silent https://curl.haxx.se/ca/cacert.pem | sha1sum
curl --silent --location --remote-name --insecure https://curl.haxx.se/ca/cacert.pem
sha1sum cacert.pem

#ハイライト行実行後の結果で、ハッシュ値がコンソールに表示されるので一致していることを確認します。

git config --system http.sslVerify true
git config --system http.sslCAinfo `pwd`/cacert.pem
git clone https://github.com/Yannik/qnap-letsencrypt.git
mv cacert.pem qnap-letsencrypt
cd qnap-letsencrypt
git config --system http.sslCAinfo `pwd`/cacert.pem

qnap-letsencryptの設定、実行

sh init.sh

#ドメインが1つの場合は以下を、「nas.xxx.de」の部分は自身のドメインに書き換えます。
openssl req -new -sha256 -key letsencrypt/keys/domain.key -subj "/CN=nas.xxx.de" > letsencrypt/domain.csr

#ドメインが2つの場合は以下を、「nas.xxx.de」「nas.xxx.com」の部分は自身のドメインに書き換えます。
cp openssl.cnf letsencrypt/openssl-csr-config.cnf
printf "subjectAltName=DNS:nas.xxx.de,DNS:nas.xxx.com" >> letsencrypt/openssl-csr-config.cnf
openssl req -new -sha256 -key letsencrypt/keys/domain.key -subj "/" -reqexts SAN -config letsencrypt/openssl-csr-config.cnf > letsencrypt/domain.csr

#以降の手順で失敗した場合、Webサーバが起動失敗することがあります。
#その際は、cp /etc/stunnel/stunnel.pem.orig /etc/stunnel/stunnel.pem で復旧できます。
mv /etc/stunnel/stunnel.pem /etc/stunnel/stunnel.pem.orig

sh renew_certificate.sh

接続確認

Webサイトに接続、有効な証明書が設定されます。

SSL証明書の定期自動更新

echo "30 3 * * * [qnap-letsencryptディレクトリパス]/renew_certificate.sh >> [qnap-letsencryptディレクトリパス]/renew_certificate.log 2>&1" >> /etc/config/crontab
crontab /etc/config/crontab
/etc/init.d/crond.sh restart