相关疑难解决方法(0)

使用HttpClient进行Https调用

我一直在HttpClient使用C#进行WebApi调用.似乎比较简洁快捷WebClient.但是我在Https打电话时被困住了.

如何制作以下代码才能Https拨打电话?

HttpClient httpClient = new HttpClient();
httpClient.BaseAddress = new Uri("https://foobar.com/");
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(
                new MediaTypeWithQualityHeaderValue("application/xml"));

var task = httpClient.PostAsXmlAsync<DeviceRequest>(
                "api/SaveData", request);
Run Code Online (Sandbox Code Playgroud)

编辑1: 上面的代码适用于进行http调用.但是,当我将方案更改为https时,它不起作用.这是获得的错误:

底层连接已关闭:无法为SSL/TLS安全通道建立信任关系.

编辑2: 将方案更改为https是:第一步.

如何提供证书和公钥/私钥以及C#请求.

c# asp.net-web-api

146
推荐指数
6
解决办法
23万
查看次数

是否有TLS 1.2的.NET实现?

由于我刚刚发现RFC 5425需要使用TLS 1.2,并且.NET还不支持它,我想知道是否有任何实现,可能是开源的TLS 1.2协议,如RFC 5246中所定义.

谢谢.

.net ssl

75
推荐指数
6
解决办法
12万
查看次数

如何指定用于WebClient类的SSL协议

我有一个应用程序使用HTTPS POST将数据发送到服务器.我使用System.Net.WebClient对象来执行此操作.这是一个发送一些数据的函数:

    private byte[] PostNameValuePairs(string uri, NameValueCollection pairs)
    {
        byte[] response;
        String responsestring = "";
        using (WebClient client = new WebClient())
        {
            client.Headers = GetAuthenticationHeader();

            string DataSent = GetNameValueCollectionValuesString(pairs);

            try
            {
                response = client.UploadValues(uri, pairs);
                responsestring = Encoding.ASCII.GetString(response);
            }
            catch (Exception e)
            {
                responsestring = "CONNECTION ERROR: " + e.Message;
                return Encoding.ASCII.GetBytes(responsestring);
            }
            finally
            {
                _communicationLogger.LogCommunication(uri, client.Headers.ToString(), DataSent, responsestring);
            }
        }

        return response;
    }
Run Code Online (Sandbox Code Playgroud)

我们传入一个以https://开头的URI

这已经很长时间了.今天,我们开始收到以下连接错误:"基础连接已关闭:发送时发生意外错误".我们对服务器的所有者进行了一些故障排除,他们最终将其缩小到以下内容.他们对服务器进行了更改以阻止TLS 1.0,并表示我们现在需要使用TLS 1.1或1.2发送数据.

我需要在我的WebClient对象(或我的函数中的其他位置)中设置什么才能使用TLS 1.1或1.2而不是TLS 1.0?

我们正在使用.NET Framework 4.5,如果这有所作为.

.net c# ssl webclient

35
推荐指数
1
解决办法
3万
查看次数

如何在ASP.NET 2.0应用程序中为API调用启用TLS 1.2?

我们的ASP.NET 2.0网站通过调用Authorize.Net的API来处理信用卡交易.授权已通知我们,在确定的日期,我们的客户必须使用TLS 1.2协议进行API调用.

Microsoft似乎表明这个10-22-16 KB文章中提供了一个解决方案:https://support.microsoft.com/en-us/help/3154517/support-for-tls-system-default-versions-included -in最.NET框架-2.0-SP2-ON-Windows的Vista的SP2和服务器-2008-SP2

...我们添加了SslProtocolsExtensions枚举,您可以将其用作设置TLS v1.2,TLS v1.1的选项,以及针对.NET Framework 2.0 SP2时ServicePointManager.SecurityProtocol属性的操作系统默认值.

请注意,尽管有本文的标题,但上述引用并未涉及Windows Vista SP2或Windows 2008 SP2操作系统,因为这些操作系统不支持TLS v1.1和1.2.

我已经通过以下步骤实现并测试了我对KB文章中指出的解决方案的理解:

  1. 在我们的Windows Server 2008 R2 Web服务器上启用了TLS 1.2(并通过ssllabs.com确认).
  2. 确认SP2实际上是为.NET framework 2.0版安装的.
  3. 将引用的KB文章中显示的两个源文件添加到我们的项目中(即SecurityProtocolTypeExtensions.cs和SslProtocolsExtensions.cs)
  4. 输入以下代码行(从KB文章)到API调用上方的项目:System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolTypeExtensions.Tls12;

不幸的是,在运行应用程序时,我在上面第3项中显示的代码行上遇到以下错误:

System.NotSupportedException:不支持请求的安全协议.

在这一点上,我很难过.我特别感谢有关如何推进此解决方案的任何见解,但我有兴趣了解您所知道的任何其他方法,以允许来自ASP.NET 2.0应用程序的API调用来使用TLS 1.2.(升级到更新版本的.NET框架是最后的选择.)

在此先感谢您的帮助!

asp.net asp.net-2.0 authorize.net tls1.2

10
推荐指数
2
解决办法
2万
查看次数