4

HTTPWebRequestクライアント証明書が必要なページにアクセスするために使用しています!

次のコードを使用していますが、すべてが機能します。

    HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(textBox1.Text);

    X509Certificate2 userCert = SelectClientCertificate();
    if (userCert != null) myReq.ClientCertificates.Add(userCert);

    HttpWebResponse myResp = (HttpWebResponse)myReq.GetResponse();

ここに私の問題があります。私の呼び出しSelectClientCertificate()は、ユーザーが証明書を選択できるようにするダイアログを表示するため、サーバーがクライアント認証を要求しない場合、ダイアログを表示したくありません! 実は私は Internet Explorer の動作主義を探しています。サーバーがユーザークライアント認証を必要とするページにアクセスすると、証明書選択ダイアログが表示されます。

を調べましたAuthenticationManagerが、本当に独自の AuthenticationModule を登録する必要があるかどうかわかりません! ヒントはありますか?

403 または 403.7の も確認しましたStatusCodeが、現在使用しているサーバーは、証明書が見つからない場合に 200 を返し、内容は許可されていないことを示しています!

4

1 に答える 1

0

サーバーが何を望んでいるのかを確認したいのはなぜですか?リクエストが https 経由で実行される場合は、証明書を要求してください。

よく覚えていれば、サーバーは誰に対しても何の義務も負いません。SSLハンドシェイクで通信を開始するのはクライアントの義務であり、クライアント/サーバーは実際のHTTP通信が発生する前に証明書を交換します。サーバーが証明書の提供を「要求」しているかどうかを検出する方法はありません。それに話しかけようとして、証明書から始めず、サーバーが証明書を必要としている場合、サーバーは接続を切断してサイレントのままにするか、ランダムなエラーコードを返す可能性があります。

サーバーにリクエストを作成/送信する前に、サーバーがハンドシェイクを試行するかどうかを早期に検出しようとすることができますが、TCP レイヤーの下のレイヤーでそれを行う必要があります。HTTPS ネゴシエーションまたはハンドシェイクのプレアブルについて説明している RFC を確認してみてください。

または、HTTP w/o S リクエストを実行してみて、失敗した場合は、証明書を要求してやり直し、HTTPS で再試行します。ユーザーは生き残ると思います。

于 2012-04-26T22:01:39.853 に答える