「その壱」では主にOpenLDAPのバイナリの入手等について書きましたが、今回はプログラミング編です。PKIのプログラミングではLDAPのディレクトリサーバから証明書やCRLを取得する必要に迫られます。Windows環境ならCryptoAPIでも可能ですが、マルチプラットホームを考えるとOpenLDAPを使った方が良いですよね。ちなみにWinLDAPとOpenLDAPはAPI的にはほぼ同じです。微妙な違いや動作に違いがありますがそれは今回説明する予定です。LDAPクライアントとして情報を取得する手順は大きく言って以下の4つです。
① 初期化:ホスト指定等の初期設定
② 検索実行:問合せを実行し紹介(Referral)があれば対応
③ 情報取得:成功したら必用な情報を取得
④ 後処理:確保したリソースを開放
紹介(Referral)とは、相互運用されているPKIドメインで自ドメイン以外の検索要求があった場合に、情報を持っているであろうディレクトリサーバを紹介されるケースです。例えばJPKIの証明書をLGPKIのディレクトリサーバに要求すると以下のようになります。
1)LGPKI(dir.lgpki.jp)にJPKI証明書の検索実行
2)GPKI(dir.gpki.go.jp)を紹介される
3)紹介されたGPKIにJPKI証明書の検索実行
4)JPKI(ldap.jpki.go.jp)を紹介される
5)紹介されたJPKIにJPKI証明書の検索実行
6)情報取得成功!
ちなみに本来は ldap_set_option() で LDAP_OPT_REFERRALS をONにすると自動的に辿ってくれるはずで、WinLDAPは何もしなくても1)の結果6)が返ってきます。OpenLDAPでは何か私が間違っているのだと思いますが自動で辿ってくれなかったので、自分で辿っています。この辺りは時間があれば再調査していところですが… さてそれではソースコードです。エラー処理は入っていませんのでご注意ください。
[続きを読む]