我必须连接到REST Web服务,并使用证书对自己进行身份验证。
当我从公司网络的外部连接并且不要使用代理服务器时,一切都可以正常工作。
问题是我必须使用WITHIN网络中的服务才能使用代理服务器。 当我从网络中尝试时,我只会收到“ 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;
}
在网络外部,没有代理:状态=确定
在网络内部,具有代理服务器:状态=未经授权
在网络内部,没有代理:连接超时
我无法控制要访问的代理服务器或Web服务
发生了什么事?代理是否正在拦截证书并进行替换?
答案 0 :(得分:1)
代理可以通过充当ManInTheMiddle来捕获SSL流量并连接到目标服务器,或者允许直接与目标服务器建立SSL连接。
当需要客户端证书时,代理必须允许直接连接,因为当目标服务器需要代理时,代理不能提供有效的证书。在SSL握手期间,某些交换的数据使用客户端证书的私钥签名以验证消息,并且代理没有该私钥。
您的代理可能正在捕获流量。我建议检查一下。您可以验证在SSL连接期间收到的证书是否与目标服务器或代理相对应