2015-01-14 8 views
8

私はいくつかの異なるサービスと通信する必要があるWeb APIを持っています。現在、私は、次のセキュリティプロトコルを使用するように設定したWeb APIを持っています。要求ごとにセキュリティプロトコルを変更する(HttpClient)

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

APIは(Twitterのように言う)HttpClientを経由して別のサービスに声をかけたとき、それはそのプロトコルを使用します。しかし同時に、別の要求がクラウドから何かにアクセスするために来るかもしれません。クラウドは何らかの理由でTLS(TLS 1.2ではなく)を必要とします。クラウドへの要求は、アウト焼成前に、再度、セキュリティプロトコルを設定します。

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

二つの別々のユニークな要求は、Twitterのための1とクラウドのための1つの中に来るとき、私はに実行している問題がありますセキュリティプロトコルが送信される前に「間違ったもの」に切り替わり、要求が失敗する可能性があります。

リクエストごとにHttpClientのセキュリティプロトコルを設定する方法はありますか?私はどこかでシングルトンの設定を入れ替えないようにしていますか?

+1

私はAppDomainを使用して奇妙なサーバーに要求を分離し、要求ごとにセキュリティプロトコルを切り替えることにしました。 http://www.superstarcoders.com/blogs/posts/executing-code-in-a-separate-application-domain-using-c-sharp.aspx – Porschiey

答えて

3

これを行う方法はないようです。 SecurityProtocolプロパティは一つだけの場所で内部TlsStreamクラス内で使用されている:

enter image description here

TlsStreamは、HTTP、FTPやSMTPなど、すべての内部TLS接続をバッ​​クアップするようです。

私はServicePointでこれを設定できることを望んでいました。多くの設定では、ServicePointManagerがデフォルトを提供します。その希望は根拠がありませんでした。

これはこれが不可能であるという非常に強力な証拠です。しかし、それは証拠ではありません。

あなたは何をすべきですか?私はあなたが話している奇妙なサーバーのHTTPクライアントライブラリを切り替えるだろう。 HTTPは特に複雑なプロトコルではありません。他にもいくつかの実装が用意されているはずです。

また、自分のサーバーでHTTPS接続を終了するプロキシを使用します。 .NETは、HTTPだけを扱います。

+0

これを調べていただきありがとうございます。残念なことに、奇妙なサーバー接続(クラウド)がSDKに焼き付けられ、使用された方法論にアクセスすることさえできません。そのHttpClientが知りたければ知りません 再作業するには多くの作業が必要ですすべての私の他の接続は、別のクライアントを使用する - と私はHttpClientを使用することを好む... これは、私はこの答えに感謝、それは非常に便利です! :) – Porschiey

3

変更する必要はありません。

ServicePointManager.SecurityProtocol | = SecurityProtocolType.Tls12;

+0

Wonderful、PayPalで私の問題を解決しました:) –

関連する問題