您好我遇到了尝试在Https下发布WebRequest的问题。
我收到以下错误
我尝试使用我公司和客户公司的大约3或4个不同的代理,即使我直接与ISP提供商没有任何限制,我在执行以下方法时也会遇到上述错误
WebRequest.GetRequestStream()
这发生在代理服务器之后,请求只能在代理服务器后面的一台PC上成功发布。代理没有安装客户端证书。
这是在.net框架1.1和 该请求已包含网络凭据。
可能是什么?
内部异常第三个错误如下: 该函数已成功完成,但必须再次调用才能完成上下文
根据iisper.h documentation此错误属于
//
// MessageId: SEC_I_CONTINUE_NEEDED
//
// MessageText:
//
// The function completed successfully, but must be called
// again to complete the context
//
#define SEC_I_CONTINUE_NEEDED ((HRESULT)0x00090312L)
on MSDN这指的是
SEC_I_CONTINUE_NEEDED 客户端必须将输出令牌发送到服务器并等待返回令牌。然后,返回的令牌在另一个调用InitializeSecurityContext(Schannel)中传递。输出标记可以为空。
这是否意味着PC缺少客户证书?
答案 0 :(得分:1)
对于SSL证书的不一致等,有很多事情可能会使事情变得复杂。但首先,你应该做一些基本的调试来排除明显的事情:
- 您是否尝试向其他服务器发送简单的Web请求?尝试(不安全)http和(安全)https
- 您是否尝试从其他计算机或其他网络进行连接?你提到客户端在代理之后;首先尝试没有代理的计算机来排除这种情况。
- 您是否在会话中制作了多个WebRequests?打开请求的数量有一个硬限制,因此请确保在获得WebResponse后关闭它们。也许只用一个请求制作一个测试程序。
如果这不会缩小范围,那么它可能更复杂,包括服务器或代理。您可以使用netshark等程序跟踪传出的网络数据包,以尝试追踪卡住的位置。
答案 1 :(得分:1)
您可以使用Fiddler或网络数据包嗅探工具(例如Ethereal Whireshark)在其工作的计算机上以及其他计算机上跟踪HTTP流量,并比较结果。这是相当低级的,但可能会对这个问题有所了解。
答案 2 :(得分:1)
在Windows上
telnet <domainname> 443
如果它连接屏幕将变为空白(点击返回几次退出)
代理可能会或可能不会真正关心您的请求,如果它是在HTTPS下,因为他们无法读取它。
其他计算机是否安装了客户端证书和证书链?
答案 3 :(得分:0)
SSL证书名称可能不匹配。自签名证书通常就是这种情况。
解决方案是编写您自己的身份验证例程,您可以始终返回true或进行必要的身份验证以确保证书有效。
// .NET 2.0+
...
ServicePointManager.ServerCertificateValidationCallback += MyValidationCallback
...
public bool MyValidationCallback(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors err)
{
return true;
}
// .NET 1.1
public class MyCertificatePolicy : ICertificatePolicy
{
public bool CheckValidationResult(ServicePoint srvPoint, X509Certificate certificate, WebRequest request, int certificateProblem)
{
return true;
}
}
...
ServicePointManager.CertificatePolicy = new MyCertificatePolicy();
...