9

私はいくつかの Web サービスを利用し、JSON 経由でデータを取得するアプリを持っています。SSLv3 が中間者攻撃に対して脆弱であり、サーバー所有者が SSLv3 を完全にオフにするという最新の発見まで、すべてがかなり長い間正常に機能していました。 . アプリケーションで接続に問題が発生し始め、「リクエストが中止されました: 安全な SSL/TLS 接続を確立できません」というエラーが返されました。解決策を探してみたところ、Web リクエストを作成する前にこのコードを追加する必要がある情報が見つかりました。

        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
        ServicePointManager.ServerCertificateValidationCallback = delegate{ 
                    return true;
        };

残念ながら、ここではうまくいきません。アプリは以前と同じように動作し、このコードが何もしないのか、サーバーにまだ問題があるのか​​ わかりません。エラー情報はかなりあいまいで、どこで問題が発生したかを理解するのに問題があります。

これが私のコードです

        ...
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.ContentType = GetRequestContentType();
        request.Method = method.ToString();
        request.Credentials = GetCredential(url);
        request.PreAuthenticate = true;
        CookieContainer cookieContainer = new CookieContainer();
        request.CookieContainer = cookieContainer;
        ...

Tls12をデフォルトとして使用するように設定する方法を尋ねたいと思います。また、最後の要求が目的のプロトコルであることを確認します。

自分のアプリが正常に動作することを確認した場合、サーバーの応答からより詳細な情報を取得し、エラーの正確な理由を特定する方法はありますか?

すべての回答と提案に感謝します。

編集

質問の 2 番目の部分は解決されました。このツールhttp://www.telerik.com/download/fiddlerを見つけたので、送信データと受信データで何が起こっているかを確認できます。また、このツールを使用すると SSL 接続をデコードできるため、このオプションを有効にすると、アプリケーションが動作し始めます。このアプリは、アプリと宛先ホスト間の通信を可能にする何かを行うと思います。しかし、それが何であるかはまだわかりません。そして、これらの接続を自分で適切に処理するようにアプリを作成する方法。

4

1 に答える 1

8

必死になってソースコード全体を調べました(インターネットのデータを取得する部分はサードパーティであり、正常に動作するまで変更する理由はありませんでした)、その行を発見しました

request.Credentials = GetCredential(url);

呼び出されたメソッドがその本体に持っていた

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;

したがって、作成する前にその値を変更しようとする試みはすべてhttpwebrequest上書きされました。SecurityProtocolTypeTls12に変更すると、すべてが機能するようになります。

于 2014-10-18T14:15:00.050 に答える