相关疑难解决方法(0)

请求已中止:无法创建SSL/TLS安全通道

WebRequest由于此错误消息,我们无法连接到HTTPS服务器:

The request was aborted: Could not create SSL/TLS secure channel.

我们知道服务器没有使用路径的有效HTTPS证书,但是为了绕过这个问题,我们使用以下代码,我们从另一个StackOverflow帖子中获取:

private void Somewhere() {
    ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(AlwaysGoodCertificate);
}

private static bool AlwaysGoodCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors policyErrors) {
   return true;
}
Run Code Online (Sandbox Code Playgroud)

问题是服务器永远不会验证证书并因上述错误而失败.有谁知道我该怎么办?


我应该提到一位同事和我几周前进行了测试,并且它与我上面写的内容类似.我们发现的唯一"主要差异"是我使用的是Windows 7并且他使用的是Windows XP.这有什么改变吗?

c# asp.net httpwebrequest windows-7 windows-8

349
推荐指数
29
解决办法
63万
查看次数

"基础连接已关闭:发送时发生意外错误." 使用SSL证书

问题:我得到这个异常"的基础连接已关闭:意外错误发生在一个发送"我的日志,它是在随机时间打破了我们的OEM集成与我们的电子邮件营销系统从不同[1小时 - 4小时]

我的网站托管在带有IIS 7.5.7600的Windows Server 2008 R2上.该网站拥有大量的OEM组件和全面的仪表板.除了我们在仪表板中用作iframe解决方案的电子邮件营销组件之外,网站的所有其他元素都可以正常工作.它的工作方式是,我发送一个httpWebRequestobject与所有凭据,我得到一个网址,我把它放在一个iframe,它的工作原理.但它仅适用于一段时间[1 HOUR - 4小时],然后我得到下面的异常"的基础连接已关闭:意外错误发生在一个发送"即使系统尝试从HttpWebRequest的它获取URL失败,同样的例外.使其再次工作的唯一方法是回收应用程序池或在web.config中编辑任何内容.我真的很精疲力尽所有我能想到的选择.

选择尝试了

明确添加, keep-alive = false

keep-alive = true

增加时间: <httpRuntime maxRequestLength="2097151" executionTimeout="9999999" enable="true" requestValidationMode="2.0" />

我已将此页面上传到非SSL网站,以检查我们的生产服务器上的SSL证书是否正在建立连接以放弃一些方法.

非常感谢任何解决方向.

代码:

Public Function CreateHttpRequestJson(ByVal url) As String
    Try
        Dim result As String = String.Empty
        Dim httpWebRequest = DirectCast(WebRequest.Create("https://api.xxxxxxxxxxx.com/api/v3/externalsession.json"), HttpWebRequest)
        httpWebRequest.ContentType = "text/json"
        httpWebRequest.Method = "PUT"
        httpWebRequest.ContentType = "application/x-www-form-urlencoded"
        httpWebRequest.KeepAlive = False
        'ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3

        'TODO change the integratorID to the serviceproviders account Id, useremail 
        Using streamWriter = New StreamWriter(httpWebRequest.GetRequestStream())
            Dim json As …
Run Code Online (Sandbox Code Playgroud)

connection ssl

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

如何指定用于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万
查看次数

.NET 4.5.1中的WCF客户端:如何在使用WebRequest时启用TLS 1.2?

我们的.net WCF客户端,WebRequest调用,编译到运行在Win2012-R2上的Windows EXE,拒绝连接到仅面向TLS 1.2的Web服务器

我们知道Win2012和.NET 4.5x支持TLS 1.2

当服务器表面TLS 1.0及更高版本时,我们没有问题.只有当我们连接的服务器具有DISABLED TLS 1.0,1.1和SSL2以及SSL3时才会出现此问题.Server ONLY表面TLS 1.2.Chrome和firefox(在Win 7及更高版本上)可以很好地连接到服务器(没有任何警告或SSL问题).

服务器证书是%100 OK.

问题是WebRequest在这种情况下无法连接.

我们需要在代码中设置什么,以便我们使用WebRequest将连接到可能运行TLS 1.2,1.1,1.0和/或SSL v3的系统?

.net wcf

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

为ServicePointManager.SecurityProtocol设置每个请求值

在c#中,我能够为SSL3或TLS设置静态值,例如

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
Run Code Online (Sandbox Code Playgroud)

要么:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
Run Code Online (Sandbox Code Playgroud)

但是(我相信)这将影响我的应用程序中所有未来的HttpWebRequest对象.

有没有办法为给定的HttpWebRequest或至少为给定的URI设置此值?

注意我看到了这个:

Uri uri = new Uri(url);
ServicePoint sp = ServicePointManager.FindServicePoint(uri);
Run Code Online (Sandbox Code Playgroud)

但ServicePoint没有SecurityProtocol属性.

目前我认为我必须在创建新的HttpWebRequest之前设置静态全局属性.

这感觉不对,这也意味着:

  • 我必须确保多个线程不同时执行此操作.
  • 我不确定这个设置在什么时候被"使用"(即当我调用webRequest.GetResponse()时,是否访问了ServicePointManager.SecurityProtocol并绑定到该URI?).

c# ssl httpwebrequest

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

如何在特定的HttpWebRequest中使用SSL3而不是TLS?

我的应用程序必须通过https与不同的主机通信,默认设置为ServicePointManager.SecurityProtocol = TLS我提供了很好的服务.现在我有一些主机(如System.Net跟踪日志显示)不回答初始TLS握手消息,但保持底层连接打开,直到超时,抛出超时异常.我尝试将HttpWebRequest超时设置为5分钟,结果相同.据推测,这些主机正在等待SSL3握手,因为IE和Firefox都可以在30-40秒的延迟后连接到这些主机.在.NET中似乎有一些回退机制将TLS降级为SSL3,但由于某些原因它没有启动.

FWIW,这是我的请求发送的握手消息(常规TLS 1.0 CLIENT HELLO消息):

00000000 : 16 03 01 00 57 01 00 00-53 03 01 4C 12 39 B4 F9 : ....W...S..L.9..
00000010 : A3 2C 3D EE E1 2A 7A 3E-D2 D6 0D 2E A9 A8 6C 03 : .,=..*z>......l.
00000020 : E7 8F A3 43 0A 73 9C CE-D7 EE CF 00 00 18 00 2F : ...C.s........./
00000030 : 00 35 00 05 00 0A C0 09-C0 …
Run Code Online (Sandbox Code Playgroud)

.net ssl httpwebrequest

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

标签 统计

ssl ×4

.net ×3

c# ×3

httpwebrequest ×3

asp.net ×1

connection ×1

wcf ×1

webclient ×1

windows-7 ×1

windows-8 ×1