wolfTips: 証明書チェーンを理解する

階層になった証明書を wolfSSL で使用する

階層になった証明書を wolfSSL で使用する場合、その内部処理を理解しておくと使いやすさが抜群に向上します。今回は、証明書チェーンを検証する際の例を紹介し、wolfSSLの内部処理と共に見ていきたいと思います。

まず下記のように階層になった証明書があるとします。

 

これらの証明書のうち、中間サーバ公開鍵証明書をもつサーバを認証するには、認証用APIを用いて次のようにクライアント・サーバ間で引数を設定します。

// サーバサイド
wolfSSL_CTX_use_certificate_file( “中間サーバ公開鍵証明書「4」“)

// クライアントサイド
wolfSSL_CTX_load_verify_locations( “中間CA「3」“)

中間サーバ公開鍵証明書「4」に署名した中間CA「3」を使って検証することでクライアントはサーバを認証することが可能になります。

この時wolfSSL 内部では次図のようにCAを管理するためのCA管理用ハッシュテーブルが作成されます。インデックスのハッシュ値はサブジェクト鍵識別子から生成されます。

 

最初の例では証明書に署名したCAを直接読み込むことで認証を行いました。

 

では、ルートCA「1」使用し認証を行うためにはどうすれば良いのでしょう?

次のように証明書を読み込みます。

// サーバサイド
wolfSSL_CTX_use_certificate_file( “中間サーバ公開鍵証明書「2」+中間CA「3」“)

// クライアントサイド
wolfSSL_CTX_load_verify_locations( “ルートCA「1」“)

この時wolfSSLは先ほどと同様にCAを管理するためのCA管理用ハッシュテーブルを作成します。まずルートCAが最初に登録されます。次にルートCAによって検証された中間CAがテーブルに登録されます。中間サーバ公開鍵証明書は証明書に記述されたサブジェクト鍵識別子から、中間CAをテーブルから取り出します。取り出した中間CAを用いて検証を完了します。

 

wolfSSL に含まれる./certs フォルダの証明書を使って実際に試してみることも出来ます。まず最初の例、中間CAを直接ロードする場合、次のコマンドを使用します。

//サーバに中間公開鍵証明書をロード
$ ./examples/server/server -c ./certs/test-pathlen/server-1-cert.pem
//クライアントに中間CAをロード
$ ./examples/client/client -A ./certs/test-pathlen/server-1-ca.pem

次にルートCAを使用する場合は、次のように行います

//サーバ中間公開鍵証明書に中間CAを追記
$cat ./certs/test-pathlen/server-1-ca.pem >> ./certs/test-pathlen/server-1-cert.pem

//サーバに中間公開鍵証明書と中間CAをロード
$ ./examples/server/server -c ./certs/test-pathlen/server-1-cert.pem

//クライアントにルートCAをロード
$ ./examples/client/client

今回は階層になった証明書を検証するにあたって、APIに設定する引数とその内部処理について見てきました。実際の内部動作を頭にイメージでき、API使用時の手助けに少しでもなったら幸いです。証明書検証のAPI使用に際し、ご質問等ありましたら、お気軽にsupport@wolfssl.com までお知らせください。