Я пытаюсь загрузить файл в свой домен https://vault.veodin.com/, размещенный на веб-сайте webfaction. .com
Когда вы открываете этот URL, браузер предупреждает вас о несоответствии имени, потому что SSL-сертификат выдан для webfaction.com, а не для veodin.com
Соответственно возникает ошибка sslPolicyError System.Net.Security.SslPolicyErrors.RemoteCertificateNameMismatch, когда я пытаюсь загрузить файл в этот домен с помощью .Net WebClient.
Для моей цели достаточно убедиться, что цель загрузки размещена на *.webfaction.com.
Можно ли доверять в этом случае certificate.subject?
Задний план:
Обновление: я использовал пользовательский метод CertificateValidationCallback, чтобы проверить, что субъект сертификата и эмитент сертификата соответствуют моим ожиданиям.
ServicePointManager.ServerCertificateValidationCallback =
MyCertificatePolicy.CertificateValidationCallBack;
...
public class MyCertificatePolicy
{
public static bool CertificateValidationCallBack(
object sender,
System.Security.Cryptography.X509Certificates.X509Certificate certificate,
System.Security.Cryptography.X509Certificates.X509Chain chain,
System.Net.Security.SslPolicyErrors sslPolicyErrors)
{
// If the certificate is a valid, signed certificate, return true.
if (sslPolicyErrors == System.Net.Security.SslPolicyErrors.None)
{
return true;
}
//if there is a RemoteCertificateNameMismatch, but the Name is webfaction.com
//then we can trust the certificate despite the name error
else if (sslPolicyErrors == System.Net.Security.SslPolicyErrors.RemoteCertificateNameMismatch
&& certificate.Subject == "CN=*.webfaction.com, OU=WebFaction, O=Swarma Limited, L=London, S=England, C=GB"
&& certificate.Issuer == "CN=DigiCert Global CA, OU=www.digicert.com, O=DigiCert Inc, C=US")
{
return true;
}
else
{
// In all other cases, return false.
return false;
}
}
}