我正在使用HttpWebRequest对象通过HTTP POST访问Web服务。部分要求是我:
HttpWebRequest会自动为我处理吗?我假设如果出现这些条件中的任何一个,我会得到标准的“无法建立SSL / TLS安全通道的信任关系”异常。
答案 0 :(得分:2)
是的,HttpWebRequest自动处理这些:
如果要禁用此功能,则必须使用this之类的代码。
答案 1 :(得分:0)
不是真的。您仍然需要检查是否使用回调函数返回sslpolicyerror。确保针对url测试您的实现,例如使用自签名证书的https://rootkit.com/。
void InitPhase()
{
// Override automatic validation of SSL server certificates.
ServicePointManager.ServerCertificateValidationCallback =
ValidateServerCertficate;
}
private static bool ValidateServerCertficate(
object sender,
X509Certificate cert,
X509Chain chain,
SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors == SslPolicyErrors.None)
{
// Good certificate.
return true;
}
log.DebugFormat("SSL certificate error: {0}", sslPolicyErrors);
bool certMatch = false; // Assume failure
byte[] certHash = cert.GetCertHash();
if (certHash.Length == apiCertHash.Length)
{
certMatch = true; // Now assume success.
for (int idx = 0; idx < certHash.Length; idx++)
{
if (certHash[idx] != apiCertHash[idx])
{
certMatch = false; // No match
break;
}
}
}
// Return true => allow unauthenticated server,
// false => disallow unauthenticated server.
return certMatch;
}