Palm Programmer's Laboratory
Palm OS Programmer's Companion Volume I/13-1
13-1 認証マネージャ
訳注:このページの内容は、Palm OS Cobalt について書かれています。 現在利用できる Palm OS についての記述ではないこと、および 分野的な問題から、訳出には非常に自信がありません。誤訳や 改善の指摘がありましたら是非お知らせ下さい。
認証マネージャは DER エンコードされた X.509 デジタル認証の保存と解析に関するセキュアなサービスを提供します。認証マネージャはこれらの認証情報のインポート、エクスポート、解析、および検証のための関数を提供します。
認証マネージャは2つの異なる方法で使用することができます。認証情報の検証と解析、および認証情報のストアとしてです。検証/解析モードでは、認証マネージャは入力データを受け取り、それをデジタル認証情報として解析します。ユーザーは認証情報を検証し、その内部フィールドにアクセスすることができます。認証情報ストアモードでは、認証マネージャはデジタル認証情報の(複数ルートの)ツリーをセキュアに保持し、ユーザーがそれらの認証情報のフィールドを利用できるようにします。
認証マネージャは、クライアントサイドのライブラリを使用するシステムサーバーです。認証情報をセキュアに保存するために、認証マネージャはデータマネージャの金庫( vault )機能を提供します。これにより、認証マネージャは認証ストアに追加される認証情報の整合性を保証することができます。
認証マネージャを直接使用するアプリケーションはごくわずかしかありません。認証マネージャは極めて低水準な API のセットだけを提供しています。
認証ストアの操作
認証マネージャは、(複数のルートを持つ)デジタル認証情報のツリーをセキュアに保存することができます。図 13.1 に基本的な認証ヒエラルキーを示します。
図 13.1 認証ヒエラルキー
認証情報ストアは、ブート時点でデバイスメーカーによって ROM に保存されているルート認証情報のリストで初期化されます。これらの ROM 認証情報は、RAM の認証情報を認証するために使用されます。
ストアから認証情報を取得するには、CertMgrFindCert() をコールします。この関数は2種類のモードで使用することができます。ID またはサブジェクト RDN によって特定の認証情報を検索する場合と、ストア内の全ての認証情報を反復する場合です。この関数が行う処理は、searchFlag パラメータを使用することで制御することができます。
ストアの認証情報の追加・削除は、それぞれ CertMgrAddCert() および CertMgrRemoveCert() を使用して行ないます。その認証チェインが既に認証情報ストアに存在する場合や、認証情報が selfsigned の場合、認証情報の追加しかできないことに注意して下さい。また、認証チェインの一部であるような認証情報を削除すると、新しい認証情報の認証を妨げることになる場合があることにも注意して下さい。
リスト 13.1 に示すコードの抜粋は、CertMgrAddCert() を使用して認証情報ストアに self-signed certificate を追加する方法を示しています。
リスト 13.1 self-signed certificate の追加
while (true) { err = CertMgrAddCert(&certInfo, false, &verifyResult); if (err) { CertMgrReleaseCertInfo(&certInfo); goto exit; } if (verifyResult.failureCode == 0) { break; } else { if (verifyResult.failureCode == CertMgrVerifyFailSelfSigned) { verifyResult.failureCode = 0; continue; } /* Another type of failure */ break; } }
認証情報の検証と解析
DER エンコードされた x509 認証情報をインポートするために CertMgrImportCert() を使用すると、CertMgrCertInfoType 構造体が返されます。この構造体は認証情報オブジェクトを表現しています。続いて、CertMgrVerifyCert() をコールしてこの認証情報の検証を行ないます。認証情報を検証したら、CertMgrGetField() を使用して認証情報からフィールドを取得します。ほとんどの場合、アプリケーションは認証情報からキーを取得しようとします。
認証が完了したら、CertMgrFindCert() または CertMgrImportCert() の呼び出し中に認証マネージャがアロケートしたリソースを開放するために、必ず CertMgrReleaseCertInfo() をコールして下さい。
認証情報のバックアップとレストア
認証ストア内の全ての認証情報はバックアップとレストアが可能です。