tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^3: 証明書ファイル
投稿日: 2019/06/19(Wed) 16:39
投稿者魔界の仮面弁士
> 選択画面というのは、例えば
> 銀行のサイトにアクセスすると出てくる「認証用の証明書を、、」の画面でしょうか
> 対処としているサイトはクライアント証明書がなくてもアクセスできるサイトなので、
> 選択画面は出てこないです。

選択画面が表示されるかはサイト次第ですね。サーバー側の設定で、
 ・クライアント証明書を無視する(証明書がそもそも要求されない)
 ・クライアント証明書を受理する(証明書が無くてもアクセスできる)
 ・クライアント証明書を要求する(証明書がないとアクセスできない)
の 3 パターンがありますので、それによってブラウザ側の振る舞いも変わってくるでしょう。
(子細はサイト管理者にお問い合わせください)

また、複数の証明書がある場合、どれを選択するのかをユーザーに選択させるのか、
それともプログラムから固定的に指定するのかという点も検討が必要かも知れません。

ちなみに証明書をもとにアクセス権が決定されるシステムの場合、サーバーの振る舞いとしては
 証明書の有無のみが判断され、内容は問わずに同じ権限として扱われるケース
 証明書のフィンガープリントが個別にチェックされてアクセス権が定まるケース
 証明書のサブジェクト(O や OU など)の文字列などを正規表現判定するなどして判断するケース
などがあります。


> phpの例があり
>   curl_setopt($ch, CURLOPT_SSLCERT, '証明書のパスを指定');
>   curl_setopt($ch, CURLOPT_SSLKEY, '秘密鍵のパスをを指定');
> これをVB6でできないのかなと考えた次第です

Win10 v1803 以降ならば、curl コマンドが利用可能です。
その場合は、--key オプションで秘密鍵のパス、
-E あるいは --cert オプションで証明書を指定することができます。


しかし先に述べた通り、AcitveX の InternetExplorer オブジェクトに対して、
証明書と秘密鍵を渡す方法があるかどうかは分からないです。


.NET Framework の場合であれば、単純に
 .ClientCertificates.Add( X509Certificate2インスタンス )
とするだけで済むのですけれどね。


> さらにお聞きしたいのですが
> ServerXMLHTTPの通信と、objIEの通信を同一セッション?にする方法ってありますか

どうでしょうね。仮にそれが出来てしまうと、別アプリから
既存のセッションを乗っ取れてしまうことにもなりそうで怖い気がするのですが。

もしかしたら、IE 上の JavaScript から、XMLHTTP / ServerXMLHTTP を呼び出した場合に、
セッションが引き継がれるかも知れません。調べていませんけど。


仮にそのセッションが、Cookie 管理されているだけのものであれば、
ServerXMLHTTP の setRequestHeader メソッドや、
InternetExplorer の Navigate2 メソッドの第 4 引数にて
"Cookie: 〜" ヘッダーを付与するという手はありそうです。
今回の目的には合わなさそうですけれども。

なお、現在の Cookie を得る方法としては、
ServerXMLHTTP なら getResponseHeader メソッドがあります。
InternetExplorer 側からなら、.document.cookie を使う方法か、
あるいは InternetGetCookie API を使う方法がありますが…これは有効期限のある
永続的 Cookie のためのもので、揮発性 Cookie は取得できないので、
今回の要件では出番はないかも。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。