0

ドメイン名に基づいてリモート サーバーの SSL 証明書情報を取得するための Web サービス (.NET 3.5) を作成しています。サービスを呼び出すためのコンソール アプリケーションであるクライアントがあります。現在、私には 11 個のドメイン名があります。1 つを除くすべてのサーバーの SSL 情報を取得できます。

私のコードは次のとおりです。

    using (TcpClient client = new TcpClient())
    {            
        client.Connect(strDNSEntry, 443);

        SslStream ssl = new SslStream(client.GetStream(), false);
        try
        {
            ssl.AuthenticateAsClient(strDNSEntry);    //Error thrown here
        }
        catch (AuthenticationException e)
        {
            log.Debug(e.Message);
            ssl.Close();
            client.Close();
            return cert;
        }
        catch (Exception e)
        {
            log.Debug(e.Message);
            ssl.Close();
            client.Close();
            return cert;
        }
        cert = new X509Certificate2(ssl.RemoteCertificate);
        ssl.Close();
        client.Close();
        return cert;
    }    

エラーは

"[System.IO.IOException] = {"リモート パーティがトランスポート ストリームを閉じたため、認証に失敗しました。"}".

SSLStream でのデバッグ中に調べたところ、「

この操作は、認証に成功したコンテキストを使用した場合にのみ許可されます。」

十分な資格情報がないため、エラーがスローされているか、サービスに問題がありますか? また、そのサーバーへのリモートデスクトップ接続を試みましたが、接続できません。

4

1 に答える 1

0

おそらく、「Windows Communication Foundation」WCF フレームワークを使用してサービス クラスを作成し、SSL トランスポート構成でクライアント/サーバー TCP バインディング パラメータを正しく構成できます。

これをやろうとしたら、後でテストケースをあげます。

于 2013-04-03T07:20:23.897 に答える