📝

オンラインのオレオレ認証局(BounCA)

2023/11/07に公開

久しぶりにプライベートの認証局が必要になり、openssl や easy-rsa、dogtag でゴニョゴニョやるのもなぁ、と思って探したところ、BounCA というのを見かけました。Cloud 版も提供されていたので、今回の目的にピタリということで、試しました。

感想としては、非常に簡単で(Docs 読まなくてある程度までいける簡素な UI)、30分くらいでやりたいことが実現できました。もう昔には戻れません…

BounCA Cloud

BounCA Cloudクリック

SIGN UP

Root Certificate 作成

Root Certificates > New Certificate

項目設定

Intermediate Certificate 作成

作成した Root Certificate の名前(青字:ORENO ROOT)をクリック

Intermediate Certificates for prent * > New Certificate

項目設定

証明書の発行

作成した Intermedicate Certificate の名前(青字:ORENO INTER)をクリック

Certificates for intermediate * > NEW CLIENT CERT
*今回の目的はクライアント証明書

項目設定


2 枚作成

証明書の検証

Foo Bar のダウンロード ⬇アイコンをクリック
Foo_Bar.client_cert.zip という名前で保存されるので展開

/BounCA $ ls
Foo_Bar-chain.pem		Foo_Bar.p12			intermediate_root-chain.pem
Foo_Bar.client_cert.zip		Foo_Bar.pem			rootca.pem
Foo_Bar.key			intermediate.pem

証明書自体の検証 → OK。

/BounCA $ openssl verify -CAfile intermediate_root-chain.pem Foo_Bar.pem
Foo_Bar.pem: OK

証明書発行元の Intemediate Certififate から CRL をクリックし、CRL をダウンロード

crl という名前でダウンロードされたので、CRL の検証 → OK。

/BounCA $ openssl verify -crl_check -CAfile intermediate_root-chain.pem -CRLfile crl Foo_Bar.pem
Foo_Bar.pem: OK

証明書の失効とその確認

失効させる証明書のゴミ箱 🗑アイコンをクリック

パスフレーズを入力

証明書のリストから消える

Display Rovoked をクリックすると失効した証明書も表示される

失効作業を行ったので、CRL が更新されていることを期待し、再度入手
ただ、GUI は面倒なので、Docs に書いてある API を利用
"API Token" と "CRL を得る API エンドポイントの URL" が必要

右上のユーザー 👤アイコンをクリックし、API Tokens から ADD TOKEN の作成

エンドポイントは Intermedicate Certifice の CRL を右クリックし、リンクをコピー(先ほどはクリックでダウンロードした)。

これらの情報を使って、最新の CRL を API から入手

TOKEN=<作成した TOKEN>
PEM=<Output のファイル名>
URL=<CRL の URL>

wget -NS --header="X-AUTH-TOKEN: $TOKEN" -O $PEM $URL

証明書を新しい CRL を使って検証 → 失効

/BounCA $ openssl verify -crl_check -CAfile intermediate_root-chain.pem -CRLfile crl Foo_Bar.pem
CN = Foo Bar
error 23 at 0 depth lookup: certificate revoked
error Foo_Bar.pem: verification failed

今回はオンラインで失効確認をしたいので、別途 Web サーバーを用意
主な準備

  • 各証明書に記載の配布ポイント URL に合わせて CRL を配置
  • CRL は PEM なので DER に変換
  • 拡張子 .crl にデフォルトの content-type: application/octet-stream が使われていたので mime type を追加
# nginx の例
# /etc/nginx/conf.d/mime.conf
types {
    application/pkix-crl crl;
}

# 外部から動作確認
/BounCA $ curl https://crl.oyama.cf/inter.crl -svo /dev/null 2>&1 | grep "content-type:"
< content-type: application/pkix-crl

接続できたので、-crl_download でオンラインで取ってきた CRL で検証 → 失効

/BounCA $ openssl verify -crl_check -CAfile intermediate_root-chain.pem  -crl_download Foo_Bar.pem
CN = Foo Bar
error 23 at 0 depth lookup: certificate revoked
error Foo_Bar.pem: verification failed

オンラインでも失効確認完了。

以上です。
OCSP レスポンダーは今回不要なので、ここまで。

https://www.bounca.org/
https://app.bounca.org/
https://bounca.org/docs/index.html
https://github.com/repleo/bounca
https://app.bounca.org/api/

Discussion