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…比較的新しく、そのまま適用できそう ↩