Я использую объект HttpWebRequest получить доступ к веб-сервису через POST HTTP. Часть требования то, что я:
HttpWebRequest автоматически обрабатывает это для меня? Я предположил бы, что, если бы какое-либо из этих условий подошло, я добрался бы, стандарт "не мог бы установить доверительные отношения для исключения" безопасного канала SSL/TLS.
Да, HttpWebRequest автоматически обрабатывает их:
Вы должны использовать код вроде это , если вы хотите отключить эту функцию.
Не совсем. Вам все равно нужно проверить, возвращается ли 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;
}