OpenBSD
OpenBSDには独自のHTTPサーバーがあるのを知って調べると、ACMEのクライアントもあると知った1 2。
ACMEのクライアントは、acme-client(1)
。OpenBSD 6.1から登場とのこと。
OpenBSD 6.3では、証明書やChallenge格納に必要なディレクトリは、あらかじめ作成されているようだ。早速使ってみたい。
環境は、現状最新のOpenBSD 6.3。
設定
acme-clientの設定
実際の/etc/acme-client.conf
を見れば一目瞭然。
変えたのは…
-
example.com
を自分のドメイン名に置き換え -
alternative names
に、{ mail.example.com ns.example.com www.example.com }
など、スペース区切りでSANSを記載
詳細はacme-client.conf(5)
参照。
httpdの設定
実際の/etc/examples/httpd.conf
を見れば一目瞭然。
変えたのは…
-
example.com
を自分のドメイン名に置き換え - TLS用の
server
セクションをコメントアウト
これを、/etc/httpd.conf
に置く。
TLS用のserver
セクションとは、port 443
が入ったセクション。証明書取得前は、証明書が無いので、証明書取得後に有効にしてみる。
証明書の格納先は、acme-client.conf
とhttpd.conf
で一致していることを確認する(デフォルトで一致していた)。
ACMEのChallenge用の格納先は、下記のacme-client(1)
の記載が、exampleのhttpd.conf
にあらかじめ記載されているので、これをそのまま使う。
location "/.well-known/acme-challenge/*" {
root "/acme"
root strip 2
}
詳細はhttpd.conf(5)
参照。
実行
# rcctl enable httpd
# rcctl start httpd
# acme-client -vAD example.com
上記example.comは、acme-client.conf
のdomain
に書いた自分のドメインと一致させる。
30秒くらいで、あっという間に完成。
acme-client.conf
に書いてある、/etc/ssl/example.com.fullchain.pem
や/etc/ssl/private/example.com.key
ができる。
証明書をhttpdで使う
先ほど用意した/etc/httpd.conf
のport 443
が入ったセクションを有効にして、
# rcctl reload httpd
その後、ブラウザでアクセスして確認。
証明書更新の自動化
acme-client(1)
によると、
A daily cron(8) job can renew the certificates:
acme-client example.com && rcctl reload httpd
とのこと。daily cronは、/var/cron/tabs/root
-> /etc/daily
を追うと、/etc/daily.local
というのを作れば良さそうに見える。
…というのが、後からdaily(8)
を見てわかった。
acme-client example.com && rcctl reload httpd
更新されるとexit statusが0になって、httpdがreloadされるという仕掛けですね。
…で、動くと思う…(未確認)。
参考文献
やはりOpenBSDはman
? 具体例もあり、充実している。
-
Easy Secure Web Serving with OpenBSD’s acme-client and Let’s Encrypt…cronへの言及もあり、わかりやすいが、コマンドラインオプションが少なくとも今と違うような? ↩
-
Using Let's Encrypt on OpenBSD 6.1…比較的新しく、そのまま適用できそう ↩