この記事は、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 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。