bugfix> c# > 投稿

アプリケーションが外部サービスに接続してデータを受信します。外部サービスはセキュリティプロトコルを更新して、TLS 1.0以下を除外しています。 Global.asaxに次を既に追加しました。

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 |
                                       SecurityProtocolType.Tls11 |
                                       SecurityProtocolType.Tls;

ただし、Tls 1.1以降を介して外部サービスに接続していることを確認したいと思います。

接続で使用されているセキュリティプロトコルを確認することはできますか?要求/応答オブジェクトのプロパティのいずれかに保存されていると思われます。

var request = (HttpWebRequest) WebRequest.Create(url);
request.Method = "GET";
request.ContentType = "application/json";
request.Headers["Device-Token"] = deviceId;
var response = request.GetResponse().GetResponseStream();

誰が私がこの情報を見つけることができるか知っていますか?または、使用されているセキュリティプロトコルを確認するより良い方法はありますか?


編集

(Jf Beaulacのコメントによる)より良いプラクティスを順守するために、接続プロトコルを設定するためのコードは次のように変更されました。

ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12 | 
                                        SecurityProtocolType.Tls11;

回答 2 件
  • 接続が実際に使用しているレベルを単に確認したい場合は、 SecurityManager.SecurityProtocol の値を設定するときに不要なプロトコルを削除してください 。接続で除外したプロトコルが使用されている場合、例外が発生します。

    Global.asaxで行う方法でSecurityProtocolを指定することは避けてください。これは悪い習慣です。 MSDNの備考を参照してください。

    https://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.securityprotocol%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

  • PayPalもセキュリティ設定を変更中です。

    PayPalは、アプリケーションのセキュリティプロトコルをテストしてTLS 1.2およびHTTP/1.1をサポートすることを確認するためのAPIエンドポイント(https://tlstest.paypal.com/)を提供します。

    これが私がこれをテストした方法です:

    MVCアプリケーション

    ./Global.asax.cs

    ...
    protected void Application_Start()
    {
        ...
        // Add Tls 1.1 and 1.2 to security protocol list (without removing defaults)
        ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls1.2 | SecurityProtocolType.Tls1.1
    }
    ...
    
    


    ./Controllers/TestConnection.cs

    using System;
    using System.IO;
    using System.Net;
    using System.Web.Http;
    namespace MyMVCApplication.Controllers
    {
        public class TestConnectionController : ApiController
        {
            public string Get()
            {
                var url = new Uri("https://tlstest.paypal.com/");
                var request = (HttpWebRequest) WebRequest.Create(url);
                request.Method = "GET";
                request.ContentType = "application/json";
                var response = request.GetResponse().GetResponseStream();
                if (response != null)
                {
                    string output;
                    using (var reader = new StreamReader(response))
                    {
                        output = reader.ReadToEnd();
                    }
                    return output;
                }
                return null;
            }
        }
    }
    
    



    アプリケーションを実行した後、ローカルに接続し(PowerShellを使用して接続しました)、PayPalエンドポイントから応答を受信できます。

    パワーシェル
    $url = "http://localhost:60023/api/TestConnection"
    Invoke-WebRequest -Uri $url -Headers @{Authorization = "Basic $credentials"} | ConvertFrom-Json
    
    

    ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12 を追加した場合  Global.asax.csのApplication_Start()に、確認メッセージが表示されます PalPal_Connection_OK

    接続がTLS 1.2またはHTTP/1.1をサポートしていない場合、400エラーを受け取ります。

    詳細については、https://www.paypal-notice.com/en/TLS-1.2-and-HTTP1.1-Upgrade/をご覧ください。

あなたの答え