Несоответствие имени удаленного сертификата HttpWebRequest
-
19-08-2019 - |
Вопрос
Я пытаюсь выполнить SSL-вызов, используя HTTPWebRequest
и он постоянно терпит неудачу, говоря, что не может установить доверие.Я добавил обратный вызов в ServicePointManager.ServerCertificateValidationCallback
и возвращающийся true
всегда срабатывает.Тем не менее, я бы хотел, чтобы все было немного более безопасно, чем это.Глядя на SslPolicyErrors
в методе проверки кажется, что я получаю RemoteCertificateNameMismatch
ошибка.Что не совпадает правильно, чтобы вызвать такого рода ошибку?
(редактировать:смотрите комментарии в ответе) Сайт, к которому я обращаюсь, использует HTTPBasic через SSL и URL-адрес что-то вроде v1.api.serviceprovider.com, с сертификатом, выданным на *.serviceprovider.com.
Решение
Общие проблемы с сертификатами:
- сертификат, выданный не доверенным поставщиком сертификатов (должен быть в вашей цепочке доверия)
- срок действия сертификата истек
Эта конкретная ошибка обычно означает, что сертификат выдан не для сайта, на который вы переходите.Примеры:
- разница между "www.yoursite.com" и "yoursite.com" (они разные;некоторые громкие имена понимают это неправильно, что меня действительно раздражает ...)
- доступ в качестве IP-адреса вместо имени в сертификате;или в/в
- балансировщик нагрузки перенаправляет вас на "server1,yoursite.com", но выдает сертификат от "yoursite.com".
- балансировщик нагрузки молча передает вас на "server1", который выдает сертификаты для "server1", а не для сайта
- (редактировать см. комментарии) подстановочный сертификат, выданный для нескольких уровней , т. е.выдается *.somesite.org, когда вы нажимаете foo.bar.somesite.org
Большинство из них легко идентифицировать, перейдя на сайт и прочитав предупреждения, которые выдает вам ваш браузер, а также проверив выданный сертификат.