【问题标题】:Certificate rejected when using proxy使用代理时证书被拒绝
【发布时间】:2019-04-26 12:01:43
【问题描述】:

我必须连接到 REST Web 服务,并使用证书来验证自己。

当我从公司网络外部连接并且不使用代理服务器时,一切正常。

问题是我必须使用我们网络内的服务,而我必须使用代理服务器。 当我从网络内尝试时,我只会得到“401 - 未经授权”

    private static void RestWithCert(string certificatePath,string baseUrl,string method)
    {
        HttpClientHandler handler = new HttpClientHandler(); 

        //when trying the code OUTside our company network I remove the proxy below
        handler.Proxy = new WebProxy("http://proxy.company.dk");

        handler.ClientCertificates.Add(new X509Certificate2(certificatePath, "password"));

        HttpClient client = new HttpClient(handler);
        client.BaseAddress = new Uri(baseUrl);
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        HttpResponseMessage response = client.GetAsync(method).Result;

        var status = response.StatusCode;
    }

在网络之外,没有代理:状态 = OK

在网络内部,使用代理:状态 = 未授权

在网络内部,没有代理:连接超时

我无法控制代理或我尝试访问的网络服务

发生了什么?代理是否拦截了证书并替换它?

【问题讨论】:

  • 嗨@FlyingHippo,你检查答案了吗?你能解决代理的问题吗?
  • 嗨@pedrofb 很抱歉没有尽快回复。看来你的理论是对的。我已经联系了我们的网络提供商,他们正在调查。但还没有解决方案

标签: ssl proxy certificate


【解决方案1】:

代理可以捕获 SSL 流量并通过充当 ManInTheMiddle 连接到目标服务器,或者允许直接与目标服务器建立 SSL 连接。

当需要客户端证书时,代理必须允许直接连接,因为当目标服务器需要它时,代理不能提供有效的证书。在 SSL 握手期间,使用客户端证书的私钥对一些交换数据进行签名以验证消息,并且代理没有该私钥

您的代理可能正在捕获流量。我建议检查一下。您可以验证SSL连接期间收到的证书是否对应目标服务器或代理

【讨论】:

    猜你喜欢
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多