portsでインストールしたOpenSSLの3.5以降でCA証明書エラーが発生した場合の対処

まず、OpenSSLのビルドとは関係なく、システムワイドで使用するTLS証明書を確認しておきます。

証明書パッケージのインストール/更新

# pkg install ca_root_nss #インストール
# pkg update ca_root_nss #更新
または、
# portmaster security/ca_root_nss #インストール/更新

FreeBSDのOSをインストールした直後またはOSのメジャーバージョンを更新した直後はOSによってインストールされた CA証明書ファイルが存在する(ことがある)ので確認します。

  • /etc/ssl/cert.pem
  • /usr/local/etc/ssl/cert.pem (OS新規インストール直後にはありません)

CA証明書のシンボリックリンクを確認/作成します。ln -sfでは元のファイルがあっても強制的にシンボリックリンクに置き換えます。

# ln -sf /usr/local/share/certs/ca-root-nss.crt /etc/ssl/cert.pem
# ln -sf /usr/local/share/certs/ca-root-nss.crt /usr/local/etc/ssl/cert.pem

または、certctlで証明書ストアを再構築します。(シンボリックリンクは削除されca_root_nssで取得された実ファイルがコピーされます)

# certctl rehash

ca_root_nssを更新しても/etc/ssl/cert.pemと/usr/local/etc/ssl/cert.pemは更新されないため再度certctl rehashを実行する必要があります。
シンボリックリンクの方が手間が少なく実行忘れによる更新漏れがないかもしれません。

OpenSSLが使用する証明書を整備

PortsでインストールしたOpenSSLの3.5以降では、何故かOpenSSLが使用する証明書が適切に配置されません。(/usr/local/openssl下にCA証明書が配置されない)
これによりOpenSSLを使用して通信する場合にTLS証明書(CA証明書が無い)エラーが頻発します。

OpenSSLの情報を表示
# /usr/local/bin/openssl version -a
OpenSSL 3.5.5 27 Jan 2026 (Library: OpenSSL 3.5.5 27 Jan 2026)
built on: Fri Jan 30 14:08:50 2026 UTC
platform: BSD-x86_64
options:  bn(64,64)
compiler: cc -fPIC -pthread -Wa,--noexecstack -Qunused-arguments -O3 -pipe -funroll-loops -fPIC  -fsta
ck-protector-strong -fno-strict-aliasing -DL_ENDIAN -DOPENSSL_PIC -D_THREAD_SAFE -D_REENTRANT -DOPENSS
L_BUILDING_OPENSSL -DNDEBUG
OPENSSLDIR: "/usr/local/openssl"
ENGINESDIR: "/usr/local/lib/engines-17"
MODULESDIR: "/usr/local/lib/ossl-modules"
Seeding source: os-specific
CPUINFO: OPENSSL_ia32cap=0x4ff8e3bfefebffff:0x184001242394a2c3:0x00000000fc000400:0x0000000000000000:0
x0000000000000000

この例では OPENSSLDIR: "/usr/local/openssl" となっているため、/usr/local/opensslに証明書があるかを確認します。(エラーが発生している環境ではおそらく存在しない筈です)

OpenSSLのメインの証明書ファイルとしてリンクします。
# ln -sf /usr/local/share/certs/ca-root-nss.crt /usr/local/openssl/cert.pem
OpenSSLのcertsディレクトリ内にもリンクします。
# ln -sf /usr/local/share/certs/ca-root-nss.crt /usr/local/openssl/certs/ca-root-nss.crt
ハッシュリンクの作成
# /usr/local/bin/c_rehash /usr/local/openssl/certs
/usr/local/openssl/certs/に30e1580d.0 のようなハッシュでCA証明書ファイルへのリンクが作成されます。

おそらくports更新後に発生するようになったTLS証明書関係のエラーの多くは、OpenSSLのディレクトリにCA証明書(へのリンク)を置くだけで解決します。