当前位置: 首页 > 知识库问答 >
问题:

HttpWebrequest失败,内部异常身份验证失败,因为远程方已关闭传输流

卫兴邦
2023-03-14

使用C#,.Net 4.5,我尝试在远程服务器上通过HttpWebRequest发送web请求。请参见下面的代码。我尝试了一些论坛建议的大多数解决方案,但总是以相同的错误告终。请参见下面的堆栈跟踪。调用请求时抛出错误。GetReponse()方法。

附加信息,基本上,我正在尝试调用安装在远程服务器上的VMware vCenter组件的reloadSslCertificate函数。目前,该错误仅发生在vCenter 5.5上。在5.1及以下版本中运行良好。

        var uri = String.Format("https://{0}/some_url", serverName);
        var request = (HttpWebRequest)WebRequest.Create(uri);
        request.KeepAlive = true;
        request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
        request.Headers.Set(HttpRequestHeader.AcceptLanguage, "en-US,en;q=0.8");
        request.Credentials = credential;
        request.CookieContainer = cookieContainer;


        var response = request.GetResponse();

异常:System.Net。WebException:基础连接已关闭:发送时发生意外错误---

先谢谢你。

共有3个答案

梁丘飞鸾
2023-03-14

看到这个链接,它为我工作:如何像HttpWebRequest一样用TcpClient做HTTPS?

Dim trust_all_certificates As New CertificateOverride
ServicePointManager.ServerCertificateValidationCallback = AddressOf trust_all_certificates.RemoteCertificateValidationCallback
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3

Public Class CertificateOverride

    Public Function RemoteCertificateValidationCallback(ByVal sender As Object, ByVal certificate As X509Certificate, ByVal chain As X509Chain, ByVal sslPolicyErrors As SslPolicyErrors) As Boolean

        'CertEXPIRED = 2148204801
        'CertVALIDITYPERIODNESTING = 2148204802
        'CertPATHLENCONST = 2148204804
        'CertROLE = 2148204803
        'CertCRITICAL = 2148204805
        'CertPURPOSE = 2148204806
        'CertISSUERCHAINING = 2148204807
        'CertMALFORMED = 2148204808
        'CertUNTRUSTEDROOT = 2148204809
        'CertCHAINING = 2148204810
        'CertREVOKED = 2148204812
        'CertUNTRUSTEDTESTROOT = 2148204813
        'CertREVOCATION_FAILURE = 2148204814
        'CertCN_NO_MATCH = 2148204815
        'CertWRONG_USAGE = 2148204816
        'CertUNTRUSTEDCA = 2148204818

        Return True

    End Function

End Class

我之前插入了这行代码,只是为了确保接受来自服务器端的证书:ServicePointManager. Security协议=Security协议类型. Ssl3

钦英发
2023-03-14

我们遇到了同样的例外。在我们的案例中,答案与@Dennis Laping的答案非常相似。另一个团队在Rancher负载均衡器中设置了我们尝试使用的服务,默认情况下不允许TLS 1.0或SSL3。碰巧的是,.NET 中安全协议的当前默认值(未设置)仅允许 TLS 1.0 或 SSL3。

一旦我们设置安全协议如下,一切正常:

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

尽管如此,SecurityProtocol的文档指出:

代码绝不应隐式依赖于使用特定的保护级别,也不应隐式依赖于默认使用给定安全级别的假设。如果你的应用依赖于特定安全级别的使用,则必须显式指定该级别,然后检查以确保它确实在已建立的连接上使用。此外,您的代码应设计为在面对支持协议的更改时具有健壮性,因为此类更改通常在几乎没有提前通知的情况下进行,以缓解新出现的威胁。

我们将重新评估我们的协议情况的最佳解决方案,但现在我希望这能帮助其他人。

斜成济
2023-03-14

我只想告诉大家,这个问题已经解决了。

我只是修改了在发出 Web 请求之前设置安全协议的代码部分。

出发地:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;

收件人:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls;

事实证明,vCenter 5.5在其配置中使用TLS作为SSL协议。我希望人们在遇到同样的问题时会发现这一点有帮助。

 类似资料:
  • 我使用LinkedIn Api使用Oauth2和Web请求,但今天我发现它停止工作,我得到错误身份验证失败,因为远程方已经关闭了传输流,这里是我使用的URL AUTHORIZE =“https://www.linkedin.com/uas/oauth2/authorization”;ACCESS_TOKEN = “https://www.linkedin.com/uas/oauth2/access

  • 问题内容: 我正在尝试从本地计算机在线远程连接到MySQL服务器,但出现以下错误: 我的本地MySQL服务器版本为5.5.27,libmysql-mysqlnd 5.0.10远程MySQL服务器版本为5.5.23,未公开mysqlnd版本。 我猜这是一个不兼容的密码哈希问题,但我不知道如何解决它。以下是我的连接代码的一部分 问题答案: 我克服了挑战。我发现我的远程MySQL数据库主机仍使用旧的My

  • Tweepy API请求twitter return me Twitter错误响应:状态代码=401。 这是我的实际代码: 我曾试图用tweepy软件包删除推文,并获得了所有必需的密钥。镊子包装不起作用吗?有人能帮我解决这个问题吗。

  • 突然,我们的生产服务器出现了一个不可用的错误 下面是我们从日志中发现的异常。 2021-03-26 07:18:11,437 [24] 错误 执行读取器查询系统异常.安全.身份验证.身份验证异常:调用 SSPI 失败,请参阅内部异常。---

  • 我必须在kafka中使用SSL添加加密和身份验证。 这就是我所做的: > < li> 为每个经纪人kafka生成证书: keytools-keystoreserver.keystore.jks别名localhost有效性 创建CA。生成的CA是一个公钥-私钥对,是用于签署其他证书的证书。CA负责签署证书。 使用生成的 CA 对所有代理证书进行签名 从密钥库导出证书: < code > keytoo

  • 问题内容: 尝试使用JavaMail中的NTLM连接到Exchange服务器。我可以连接到SMTP,但不能连接到IMAP。我还可以使用相同的主机/用户名/密码通过OS X Mail.app应用程序进行身份验证,帐户类型=“ IMAP”,端口143,ssl = false,authentication = NTLM,域名=“。 连接代码: 输出: 我尝试通过http://www.oracle.com