s_tajima:TechBlog

渋谷で働くインフラエンジニアのTechブログです。

CentOS7の検証: CA証明書の管理方針が変更に

概要

CentOS7の検証をしていると、ca-bundle.crtがシンボリックリンクになっていることに気がついた。

$ ll /etc/pki/tls/certs/ca-bundle.crt
lrwxrwxrwx 1 root root 49  7月 16 17:04 /etc/pki/tls/certs/ca-bundle.crt -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem

/etc/pki/ca-trust/という見覚えのないディレクトリがある。
/etc/pki/ca-trust/READMEを見ると

This directory /etc/pki/ca-trust is used by a system of consolidated CA certificates.
Please refer to the update-ca-trust(8) manual page for additional information.

とのこと。
どうやらCentOS7から、CA証明書の管理方針が変わっているらしいので調べてみた。

update-ca-trustとは

$ man update-ca-trust
を確認してみた。詳しいことはここに全て書かれているので大事そうなところだけ抜粋。

update-ca-trust(8) is used to manage a consolidated and dynamic configuration feature of Certificate Authority (CA) certificates and associated trust.

CAの証明書を動的に管理する仕組みらしい。

In order to enable legacy applications, that read the classic files or access the classic module, to make use of the new consolidated and dynamic
configuration feature, the classic filenames have been changed to symbolic links. The symbolic links refer to dynamically created and consolidated
output stored below the /etc/pki/ca-trust/extracted directory hierarchy.

ca-bundle.crtに貼られていたシンボリックリンクは、古いアプリケーションとの互換のためらしい。

Files in subdirectories below the directory hierarchy /usr/share/pki/ca-trust-source/ contain CA certificates and trust settings in the PEM file
format. The trust settings found here will be interpreted with a low priority.

Files in subdirectories below the directory hierarchy /etc/pki/ca-trust/source/ contain CA certificates and trust settings in the PEM file format.
The trust settings found here will be interpreted with a high priority.

独自にCAの証明書を追加したい場合は、/usr/share/pki/ca-trust-source/もしくは/etc/pki/ca-trust/source/にPEM形式の証明書を置く必要があるらしい。
また、両ディレクトリの違いはその優先順位とのこと。

ざっと見た感じCA証明書のリストを常に最新の物に保てるよ。
という仕組みではなく、(すくなくとも現状では)任意のCA証明書を手で入れるときのやり方が変わったよという話しらしい。

実際に使ってみた

(まだ一般ユーザの設定をしていないのでrootユーザでの検証)

  • 現在のCA証明書を退避。
# cp /etc/pki/tls/certs/ca-bundle.crt /var/tmp/ca-bundle.crt
  • 証明書の作成
# vim /etc/pki/ca-trust/source/anchors/test-additional.crt
# cat /etc/pki/ca-trust/source/anchors/test-additional.crt
-----BEGIN CERTIFICATE-----
MIIDPTCCAqagAwIBAgIJAISdA7ceQY8cMA0GCSqGSIb3DQEBBQUAMHMxCzAJBgNV
.. snip ..
n+1tqoJSHZpCSBEkjha0ncE=
-----END CERTIFICATE-----
  • update-ca-trustの実行
# update-ca-trust extract
  • 証明書が追加されていることを確認
# diff /etc/pki/tls/certs/ca-bundle.crt /var/tmp/ca-bundle.crt
2,21d1
< MIIDPTCCAqagAwIBAgIJAISdA7ceQY8cMA0GCSqGSIb3DQEBBQUAMHMxCzAJBgNV
 .. snip ..
< n+1tqoJSHZpCSBEkjha0ncE=
< -----END CERTIFICATE-----
< -----BEGIN CERTIFICATE-----

所感

  • 先日騒がれていたような、ルートCA証明書の期限切れ問題に対する解決策なのかと思ったけどそうではない模様。
  • いままであまり良くない気がしていたca-bundle.crtの直接編集をしなくてよくなるのはよさそう。
    • ca-certificates-20XX.X.X-XX.el7.noarchのUpdateがしやすくなるので。