#wcf
#wcf
Вопрос:
У меня есть защищенная служба WCF (https://MachineName:sslport/services ) самостоятельно размещенный на машине. Разные экземпляры одной и той же службы развернуты на разных машинах. Из клиентского приложения я могу подключиться к этим службам с помощью кода, т. е.) используя ChannelFactory() с тем же адресом конечной точки. Но если я попытаюсь получить доступ к службе, используя адрес конечной точки как (https://ipaddress:sslport/services) заменив имя машины на IP-адрес машины, я получаю сообщение об ошибке «не удалось установить доверительные отношения». Я знаю, что это ошибка, вызванная ssl-сертификатом, из-за которого не удалось установить доверительные отношения.
Существуют ли какие-либо настройки или возможные способы заставить это работать? Пожалуйста, укажите, если кто-нибудь знает об этом.
Ответ №1:
Сертификаты SSL основаны на именах, что означает, что проверка сертификата SSL завершится неудачей при попытке использовать IP-адрес вместо имени.
Вы могли бы изменить проверку, чтобы она всегда выполнялась успешно — это не конфигурация, а примерно 1-5 строк кода… НО это АБСОЛЮТНО НЕПРАВИЛЬНЫЙ путь, поскольку он сводит на нет всю цель сохранения SSL-сертификата в первую очередь, потому что тогда любой SSL-сертификат (подделанный, самоподписанный и т.д.) Будет принят как нормальный…
Возможно, если вы расскажете, ПОЧЕМУ вы хотели бы это сделать, есть вариант получше.
Ответ №2:
Я использую следующее, чтобы позволить мне обойти аутентификацию по умолчанию…
Непосредственно перед подключением я подключаю этот обратный вызов.
System.Net.ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(ValidateRemoteCertificate);
Затем в ‘ValidatRemoteCertificate’
private static bool ValidateRemoteCertificate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors policyErrors)
{
if (policyErrors == SslPolicyErrors.None) return true;
if (cert.Subject == "CN=whatever.address.com") return true;
return false;
}
Вы можете указать столько адресов, сколько захотите.
Надеюсь, это поможет!
Комментарии:
1. Яхия, код, который я предложил выше, явно допускает одно имя ‘whatever.address.com ‘, Я не предлагаю, чтобы он возвращал ‘true’ для каждого адреса. Если вы знаете, что домен действителен, независимо от состояния сертификата, то, конечно, можно принять его (если я чего-то не упускаю).