尝试获取某些SSL证书信息时出现问题。
通常,代码工作正常,但在某些情况下,我收到403 Forbidden错误。即使发生这种情况,我也希望获得证书信息。还有一些情况我也会收到无效的登录凭据。
我想获得X509Certificate
对象而不管其中任何一个问题。
如果我使用IE浏览它们,它会向我提供证书信息,无论消息如何。
因此,对于示例代码,request
和response
都定义为对象变量,并在调用request
之前正确设置getRequest()
。
如果没有网页错误,此代码可以正常运行,但如果出现错误,则变量response
为null
。
是否有另一种方法可以将X509Certificate
转换为名为cert
的对象变量,即使看到这些错误?
老实说,如果我的回复有效,我真的不在乎,我只关心X509Certificate
。
// callback used to validate the certificate in an SSL conversation
private static bool ValidateRemoteCertificate(
object sender,
X509Certificate certificate,
X509Chain chain,
SslPolicyErrors policyErrors
) {
// allow any old dodgy certificate...
log.write(0, "entering ValidateRemoeCertificate ");
return true;
}
// getRequest
private int getRequest()
{
try {
log.write(1, "Validating " + webHostName);
// request.Method = method;
ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(ValidateRemoteCertificate);
response = (HttpWebResponse)request.GetResponse();
response.Close();
} catch (Exception w) {
if (w.Message.Contains("401"))
{
log.write(4, "Web Site Authentication Required for " + host + ":" + port);
return 401;
}
else if (w.Message.Contains("403"))
{
log.write(4, "Forbidden Access for " + host + ":" + port);
return 403;
}
else
{
log.write(4, "Error Reading Web Site " + host + " Port " + port + " " + w.Message);
return 400;
}
}
return 0;
}
感谢您的帮助!
答案 0 :(得分:1)
请改用SslStream课程。使用constructor RemoteCertificateValidationCallback代理AuthenticateAsClient,在{{3}}期间调用该代理来检查服务器的证书。