NetBSD 10.0のcertctlとmozilla-rootcerts

はじめに

この記事はNetBSD Advent Calendar 2023の6日目の記事です。

NetBSDでは以前からOpenSSLが標準ディストリビューションが含まれていましたが、10.0からはTLSで扱う証明書管理を行うcertctl(8)コマンドが追加されました。また、ルートCA証明書集であるmozilla-rootcertsが標準でバンドルされるようになりました。

なお、NetBSD 10.0は2023/12/6現在、まだRC1です。

なぜかNetBSD 10.0のアナウンスページのChangesにはcertctlが見つけられませんが…

certctl

certctl(8)は OpenSSLの証明書管理をコマンドラインから容易に行うためのユーティリティです。その実態はシェルスクリプトで、OpenSSLが使う証明書の登録や無効設定等を行えます。OpenSSLの一部機能を使いやすくしたWrapperスクリプトで、もっと直接的に言えば /etc/openssl/certs/ に設置する証明書を管理(追加したり削除したり)するものと言えます。

なお同名のコマンドが FreeBSD 12.2 から存在していますが、実装は異なりサポートする機能も多少異なりますが文法はだいたい合わせてあるようです。

詳しい使い方はman page等を参照してもらうとして。usageは以下のようになります。

Usage: certctl [-nv] [-C <config>] [-c <certsdir>] [-u <untrusted>]
               <cmd> <args>...
       certctl list
       certctl rehash
       certctl trust <cert>
       certctl untrust <cert>
       certctl untrusted

自明だと思いますが、listで表示、rehash でハッシュ再計算、trustで信頼する証明書の登録、untrsctで信頼しない証明書の登録、untrustedで信頼しない証明書の一覧、ですね。証明書の変更があった場合

 # certctl rehash

とすれば適切に再登録してくれる、という感じです。

certctl(8)には設定ファイルがあります。これは /etc/openssl/certs.conf です。標準では有効な内容は以下の2行です。

 netbsd-certctl 20230816

 path    /usr/share/certs/mozilla/server

1行めは単にcertctlのバージョンを示します。

2行めのpathは、管理対象となる証明書が存在するパスです。また、/etc/openssl/certs下をcertctlによらず直接管理する場合はmanualというキーワードを設定する必要があるようです。

標準のルートCA証明書

さて、標準でpathに指定されている /usr/share/certs/mozilla/server に格納されている証明書ですが、これは Mozilla Projectが配布しているルートCA証明書集で、おそらくpkgsrcのsecurity/mozilla-rootcertsパッケージに含まれるものと同等と思われます。

NetBSD 10.0をインストールし、certctl listとすると次の様に一覧が出力さるでしょう。

% certctl list
/usr/share/certs/mozilla/server/ACCVRAIZ1.pem
/usr/share/certs/mozilla/server/AC_RAIZ_FNMT-RCM.pem
/usr/share/certs/mozilla/server/AC_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.pem
/usr/share/certs/mozilla/server/ANF_Secure_Server_Root_CA.pem
/usr/share/certs/mozilla/server/Actalis_Authentication_Root_CA.pem
(以下略)

もしも何も出力されなければrootで前述の certctl rehash を実行します。

NetBSD 9まではOpenSSLはバンドルされていましたが、ルートCAの証明書は無かったため、別途pkgsrcからmozila-rootcertsをインストールする必要があったのですが、 NetBSD 10 からはようやく直ぐにhttpsサイトにアクセスできるようになったということです。

mozilla-rootcertsの効果

httpsサイトへ正しく検証して接続といえばWebブラウザですが、例えばwww/firefoxはNetBSD9にインストールすると自動的にmozilla-rootcertsもインストールされるため困りません。ここではあえて依存しておらずでも使いがちなコマンドとして、gitコマンドを使ってみます。

このように一手間減る感じです。

補足というか懸念事項

標準ディストリビューションにrootcertsが入ったのはいいのですが、いくつか懸念事項があります。

  1. mozilla-rootcertsは割と頻繁に更新されるんだけど、これベースシステムに入れたら更新どうするんだろう。みんながみんな常にNetBSD srcからbuildしているわけではないし、部分更新必要だと思うのだけれど。結局pkgsrcの物に切り替えて対応するのが現実的かも。
  2. せっかく標準でhttpsで検証できるようになったのに、NetBSD 10の ftp(1)のman pageでも
      https://[user[:password]@]host[:port]/path
            An HTTPS URL, retrieved using the HTTPS protocol.  If set
            https_proxy is defined, it is used as a URL to an HTTPS proxy
            server.  If HTTPS authorization is required to retrieve path, and
            user (and optionally password) is in the URL, use them for the
            first attempt to authenticate. There is currently no certificate
            validation and verification.
    と書いてあるんだけど?(実際には対応してるような気がする。単にマニュアル変更漏れ?)

この記事は023/12/6におおしまやが書きました。