WinInetを使用して、クライアント証明書を制御する方法は?


天然そば茶  2007-03-15 04:09:16  No: 98291

開発環境
VB5.0 + WinInet

現在、クライアント証明書を用いたHTTPSによる通信を実現するプログラムをVB5.0とWinInetを
使用して作成しています。

クライアントPCにサーバからのクライアント証明書要求に該当する証明書が複数インストール
されていた場合、クライアント証明書選択画面(InternetErrorDlgを使用。以下、選択画面)
を表示することでユーザに選択させ、以後の通信では初回通信時に選択した証明書を自動的に
使用する、という動作を実現しようとしています。

初回通信時に選択画面を表示してクライアント証明書をユーザに選択させることはできたのですが、
あて先パスを変更してさらに要求を行う際に、初回通信時に選択した証明書を引き継ぐことができず
(リクエストハンドラを再作成するため)、再び選択画面を表示してしまいます。

WinInetを使用した場合のクライアント証明書の制御方法をご存知の方はいらっしゃいませんか?

以下、作成したコードを記述します。
(そのままだと長かったので、省略して記述しています)

 InetHandle = InternetOpen()
 SessionHandle = InternetConnect(InetHandle)
 RequestHandle = HttpOpenRequest(SessionHandle)

Again1:

 ret = HttpSendRequest(RequestHandle)

'問題なくクライアント証明書を選択することができます。
If Err.LastDllError = ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED Then

    ret = InternetErrorDlg(GetDesktopWindow(), RequestHandle, ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED)
    GoTo Again1

End If

 'あて先パスを変更する
 RequestHandle = HttpOpenRequest(SessionHandle)

Again2:

 ret = HttpSendRequest(RequestHandle)

'上で選択したクライアント証明書を使用せず、再び表示してしまいます。
If Err.LastDllError = ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED Then

    ret = InternetErrorDlg(GetDesktopWindow(), RequestHandle, ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED)
    GoTo Again2

End If


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加