繁体   English   中英

验证C#中的连接安全协议

[英]Verify Connection Security Protocol in 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;

如果您只是想检查连接实际使用的级别,请在设置SecurityManager.SecurityProtocol的值时删除不需要的协议。 如果连接使用您排除的协议,则会发生异常。

请注意,应避免在Global.asax中指定SecurityProtocol的做法,这是一种不好的做法。 请参阅MSDN上的评论:

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

我发现PayPal也在更改其安全设置。

PayPal提供了一个API端点( https://tlstest.paypal.com/ ),用于测试您的应用程序的安全协议,以确保它支持TLS 1.2和HTTP / 1.1。

这是我测试的方式:

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

如果已在Global.asax.cs中将ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12添加到Application_Start(),您将收到确认消息PalPal_Connection_OK

如果您的连接不支持TLS 1.2或HTTP / 1.1,则会收到400错误。

有关更多信息,请访问https://www.paypal-notice.com/zh-CN/TLS-1.2-and-HTTP1.1-Upgrade/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM