この記事は、NetBSD Advent Calendar 2018の4日目の記事です。
自分のウェブサイトをLet's EncryptでTLS/SSL化したいと思っていて、
過去にはpkgsrc/security/py-certbot
を試すために
pkgsrc/sysutils/py-psutil
のNetBSDへの移植に
取り組んだこともあったのだが、なかなか継続的に利用し続けるのは大変だった。
NetBSD blogの Using acme.sh for Let's Encrypt certificates on pkgsrc.org servers を読んで、acme.sh を試したいと思ったのだが、そもそもpkgsrcには収録されていないし、DNSによる認証は ちょっと遠慮したいので、そのまま適用はできないでいた。 やっと重い腰を上げてpkgsrcに追加して設定した話を書きたい。 ちなみに、ワイルドカード証明書が発行できるようになっているが、今回はワイルドカード証明書 は発行を受けない。
インストール
インストールは、pkgsrc/security/acmesh
を使えば良い。
# cd /usr/pkgsrc/security/acmesh # make install以上のように実行すれば良い。このようにインストールすると、 ▽usおそらくHTTPでの認証で ウェブサーバーをインストールしないでもTLS/SSL証明書を発行できるように
pkgsrc/net/socat
もインストールされる。
今回はsocat
は使わないがインストールされてしまう。
TLS/SSL証明書の発行を受ける
TLS/SSL証明書の発行を受けようというサーバーのホスト名はwww.example.com
であることにしよう。
このFQDNでアクセスできるようにDNSを設定しておくのが必要なのは言うまでもない。
私は、このサーバーでpkgsrc/www/nginx-devel
をhttpdとして
使用する予定なので、TLS/SSL証明書の発行を受ける際にも、これを使用することにする。
以下のようにインストールし、設定しておく。
# cd /usr/pkgsrc/www/nginx-devel # make install # vi /usr/pkg/etc/nginx/nginx.conf http { (snip) server { listen 80; server_name www.example.com; (snip) location / { root /usr/htdocs; index index.html index.htm; } (snip) # cp /usr/pkg/share/examples/rc.d/nginx /etc/rc.d # vi /etc/rc.conf (snip) nginx=YES (snip) # /etc/rc.d/nginx start次に、HTTPでの認証用のファイルの作成などを
acme.sh
コマンドを使って行なう。
# sudo nginx $ /usr/pkg/sbin/acme.sh --issue -w /usr/htdocs -d www.example.comこれによって、例えば
/usr/htdocs/.well-known/acme-challenge/q-h2-aGCzrWmEurHUYgG_KZU1hVroXgi9n6nzNH0odcのようなファイル名のファイルが生成され、2分間(?)程度待つとTLS/SSL証明書が発行される。 場所は、
nginx
ユーザーのホームディレクトリーである/var/db/nginx
以下である。
使用する2つのファイルを/usr/pkg/etc/nginx
内にシンボリックリンクしておく。
# cd /usr/pkg/etc/nginx # ln -s /var/db/nginx/.acme.sh/www.example.com/fullchain.cer www.example.com.cer # ln -s /var/db/nginx/.acme.sh/www.example.com/www.example.com.key www.example.com.key
これらを、それぞれ/usr/pkg/etc/nginx.conf
に以下のように設定する。
# vi /usr/pkg/etc/nginx.conf (snip) http { server { listen 443 http2 ssl; server_name www.example.com; ssl_certificate www.example.com.cer; ssl_certificate_key www.example.com.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; (snip)
TLS/SSL証明書を更新する
このように発行されたLet's EncryptのTLS/SSL証明書は、3カ月しか有効ではない。
毎回手作業では大変なのでcron
で自動的に更新したい。
今回は以下のように、TLS/SSL証明書を再取得してnginx
を再起動する
ように設定した。しかし、まだ初回の更新の機会がめぐって来ていないので、
実際のところはうまく動くかは分からない。
# cd /usr/pkgsrc/security/sudo # make install # visudo (snip) nginx ALL=(root) NOPASSWD: /etc/rc.d/nginx reload # sudo nginx $ crontab -e 3 1 * * * /usr/pkg/sbin/acme.sh --cron --home /var/db/nginx/.acme.sh --reloadcmd "/usr/pkg/bin/sudo /etc/rc.d/nginx reload" && /usr/pkg/sbin/acme.sh --cron --home /var/db/nginx/.acme.sh --installcert -d www.example.com --reloadcmd "/usr/pkg/bin/sudo /etc/rc.d/nginx reload"※
crontab
の内容について、実際に動くのを確認できた内容に書き換えました。
明日は、NetBSDデスクトップ環境として常用しているHP Spectre x360 13-inch ae019TUについて、 NetBSD/amd64-currentをインストールする話を書こうと思います。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。