【问题标题】:App doesnt run without Fiddler certificate没有 Fiddler 证书,应用程序无法运行
【发布时间】:2014-08-13 01:40:51
【问题描述】:

这似乎是一个非常古老的问题,但是,所有上述解决方案都不适用于我。我正在向客户端发出请求并收到我使用 fiddler 早期捕获的 HTTPS 响应,但是现在我的应用程序在没有 Fiddler 证书的情况下无法工作。当我在提琴手中选择解密 HTTPS 流量时,应用程序可以工作,否则即使我从提琴手中删除 HTTPS 捕获选项并删除提琴手证书,它也不会。

我也尝试过完全删除 fiddler,但这也不能解决问题。到目前为止,我没有选择。这是我的代码

    Dim cert As X509Certificate = X509Certificate.CreateFromCertFile("Cert Location")
    ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf OnCertificateValidation)
    ServicePointManager.Expect100Continue = False
    Dim request As HttpWebRequest = CType(HttpWebRequest.Create(WebURL), HttpWebRequest)
    request.Method = "POST"
    Dim requestDataByte() As Byte = Encoding.UTF8.GetBytes(CreateRequestXML)
    request.ContentLength = requestDataByte.Length
    Dim requestdata As Stream = request.GetRequestStream()
    requestdata.Write(requestDataByte, 0, requestDataByte.Length)
    requestdata.Close()
    request.GetRequestStream.Close()
    request.ClientCertificates.Add(cert)
    request.KeepAlive = False

    Dim response As HttpWebResponse = CType(request.GetResponse, HttpWebResponse)
    If response.StatusCode > 400 Then
        MsgBox("Error:" + response.StatusDescription + vbCrLf + response.StatusCode)
    End If
    Dim response_stream As Stream = response.GetResponseStream
    response_stream.Close()
    response.Close()
    Dim reader As StreamReader = New StreamReader(response_stream)
    _response = reader.ReadToEnd
    reader.Close()

我不断收到 500 内部服务器错误。 编辑:我之前没有正确关闭响应连接,但是我很久以前修改了那部分代码。那修改不应该解决了我的问题吗?

我已经根据我在网上找到的帖子修改了代码。但仍然无法解决问题。

【问题讨论】:

  • 我现在也关闭了流。然而,没有任何改善。我也尝试在另一个系统中执行该程序,仍然是同样的问题。我真的很想得到一些帮助来解决这个问题。
  • 考虑将调用 ClientCertificates.Add 移动到 Dim request 行之后。您绝对应该删除呼叫request.GetRequestStream.Close(),因为您在呼叫requestData.Close()时已经关闭了该流
  • 我昨天忘记更新我的问题了。事实上,我完全按照你的建议做了,现在一切正常。我没有注意到我的 WebRequest 不正确,因为 Fiddler 正在修复它。我尝试了网络异常以尝试查看问题所在,但就是找不到。希望有一种方法可以从某种调试信息中解决这个问题。正如您所建议的那样,我已经对我的 .Close() 调用进行了更改。谢谢!

标签: https certificate fiddler


【解决方案1】:

Fiddler 的 证书不太可能与此有关。更可能的解释是您的代码向服务器提供客户端证书的方式存在问题;当 Fiddler 在中间时,该问题得到了解决(因为 Fiddler 无法获取您的应用程序发送的客户端证书并将其传递给服务器)。

所以,退一步说,当您运行 Fiddler 时,您的磁盘上是否有 %AppData%\Documents\Fiddler\ClientCertificate.cer 文件?如果是这样,Fiddler 会将该客户端证书发送到服务器。如果没有,那么您的服务器根本没有获得客户端证书。

【讨论】:

    【解决方案2】:

    解决上述问题的方法是在定义请求对象后使用 ClientCertificates.add() 方法。并通过调用适当的 .Close() 方法正确关闭您的响应流。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-22
      • 1970-01-01
      • 1970-01-01
      • 2014-10-05
      • 2014-04-07
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      相关资源
      最近更新 更多