1

クライアント証明書で動作するように構成された WCF サービスがあります。

クライアントは .net 3.5 WPF アプリケーションです。

テスト中、Microsoft CA などによって生成された証明書と完全に連携します。物理トークン (Aladdin/Safenet eToken Pro 64k) でテストしている間も、うまく機能します。

(最初にサーバーに接続しようとすると、「トークン ログオン」ウィンドウがポップアップします。トークンへの認証が成功すると、サーバー要求が機能し、次のサーバーへの接続試行は、トークン ログオン メッセージが表示されずに成功します)

ここで、トークンを削除して再挿入すると、同じ証明書で接続しようとすると、「要求が中止されました: SSL/TLS セキュア チャネルを作成できませんでした」というエラーが表示されます。HResult 0x80131509

再び機能させる唯一の方法は、アプリケーションを再起動することです。

証明書は System.Security.Cryptoragpy で取得されます。

var store = new X509Store("My", StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
//Getting the right certificate and then:
store.Close();

サーバーへの接続は次のコードを使用します。

string uriStr = txtUrl.Text + "/rest/auth/strong/Ping";
var client = WebRequest.Create(new Uri(uriStr)) as HttpWebRequest;

client.Method = "POST";
client.ContentType = "application/text; charset=unicode;";
client.ContentLength = 0;

client.PreAuthenticate = false;
client.KeepAlive = false;

client.ClientCertificates.Add(certificate); //Cert attached to the request

using (var res = client.GetResponse() as HttpWebResponse)
{
    using (var responseStream = res.GetResponseStream())
    {
         using (var reader = new StreamReader(responseStream))
         {
             string s = reader.ReadToEnd();
             ShowAndWriteToFile(s);
         }
    }
}

詳細ログと Wireshark キャプチャを調べましたが、そこから問題を見つけることができませんでした。

私が試した他のもの:

  1. 暗証番号キャッシュのクリア – トークンを削除する前にキャッシュをクリアすると、次にサーバーに接続しようとすると、「トークン ログオン」ウィンドウがポップアップします。削除して再挿入した後にクリアしても、何も変わりませんでした。
  2. WCF サービスの再起動 - トークンを再挿入した後も結果は同じです。
  3. トークンの削除と再挿入の前後に、証明書に対する他の操作がどのように動作するかを確認します。たとえば、トークンを削除して再挿入した後、証明書を使用してメッセージに署名して検証すると、「トークンログオン」ウィンドウが再びポップアップし、引き続き機能します。
  4. ストアに置かれた自己作成の証明書に接続しようとしました – 機能し、ストアから削除して再度追加しました – それでも機能しました.
4

0 に答える 0