はじめに
Windowでは、証明書はLocalMachineやCurrentUserストアに保存されています。(certlm.mscやcertmgr.mscで確認できます。)
.NetのAPIからもLocalMachineやCurrentUserを指定して証明書にアクセスすることができます。
ubuntu20.04.2LTSでは、どのような仕組みになっているのか調べてみました。
以下の記事に詳しく書かれています。
CurrentUser
ユーザのストアは、以下の場所に保存されます。ストアは、初回アクセス時に作成されます。
~/.dotnet/corefx/x509stores/
.Netが内部的に管理しているフォルダなのでAPI経由で使用します。(パスも変更されるかもしれません。)
My、Root、IntermediateでWindows上とほぼ同様の操作が可能です。
LocalMachine
Ubuntu では基本的な CA 証明書が ca-certificates パッケージで提供されていて、ローカルマシンストアは、このパッケージと連携しています。
通常、ca-certificatesパッケージは、以下のフォルダにインストールされています。
/usr/share/ca-certificates/
ca-certificatesパッケージで有効にする証明書のリストです。
/etc/ca-certificates.conf
...
mozilla/ACCVRAIZ1.crt
mozilla/AC_RAIZ_FNMT-RCM.crt
...
自己署名証明書はRoot、それ以外はIntermediateとして認識されます。
APIからは、読み取り専用で書き込むことはできません。
証明書を登録する方法
- /usr/share/ca-certificates/にPEM形式の証明書をコピーします。
- ca-certificates.confにコピーした証明書を追記します。
- sudo update-ca-certificatesを実行します。
削除方法
- ca-certificates.confから削除したい証明書の行を削除します。
- sudo update-ca-certificates -fを実行します。
Myは存在しません。
まとめ
ユーザストアは、.Net独自の形式で保存されているため、Windowsとの互換性が高いようです。ローカルマシンストアは、OSの証明書を参照する形になっているので参照のみとなっています。ローカルマシンストア、Myがないため、.net Web API等で使用できるWebサーバのKestrelでも、ストアは使用せずに、環境変数にサーバ証明書のpfxファイルのパスを指定するようになっています。