Вызов веб-службы C # (asmx) через SSL с подстановочным сертификатом

1

Я делаю вызов веб-службы из службы Windows. Веб-служба должна использовать SSL, поэтому URL-адрес веб-службы https://myclient.mydomain.com:4443/app/webservices/webservice.asmx

4443 используется вместо 443 по другим причинам.

Я могу просмотреть этот URL, и он отлично работает. Сертификат приобретается у GlobalSign и является подстановочным сертификатом *.mydomain.com

Нет проблем, связанных с веб-сервисом.

Когда я звоню из службы Windows, он не работает. Используя System.Net.Trace, я смог получить приведенную ниже информацию. В то время как браузеры работают нормально, кажется, что.NET не работает корректно с помощью подстановочных сертификатов. Кто-нибудь еще испытал это?

[Subject]
  CN=*.mydomain.com, OU=Domain Control Validated
  Simple Name: *.mydomain.com
  DNS Name: mydomain.com

[Issuer]
  CN=AlphaSSL CA - G2, O=AlphaSSL
  Simple Name: AlphaSSL CA - G2
  DNS Name: AlphaSSL CA - G2

System.Net Information: 0 : [2688] SecureChannel#48611003 - Remote certificate has errors:
    ProcessId=8676
    DateTime=2014-08-21T20:58:13.4998725Z

System.Net Information: 0 : [2688] SecureChannel#48611003 -     Certificate name mismatch.
    ProcessId=8676
    DateTime=2014-08-21T20:58:13.4998725Z

System.Net Information: 0 : [2688] SecureChannel#48611003 - Remote certificate was verified as invalid by the user.
    ProcessId=8676
    DateTime=2014-08-21T20:58:13.4998725Z

System.Net.Sockets Verbose: 0 : [2688] Socket#31879635::Dispose()
    ProcessId=8676
    DateTime=2014-08-21T20:58:13.4998725Z

System.Net Error: 0 : [2688] Exception in HttpWebRequest#10189992:: - The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel..
    ProcessId=8676
    DateTime=2014-08-21T20:58:13.4998725Z

- ОБНОВЛЕНИЕ 1 -

Ок частично разрешены. Я забыл, что мы ввели код для преобразования всех имен хостов в IP-адреса, которые вызывают несоответствие имени. Этот URL-адрес https://connect.microsoft.com/VisualStudio/feedback/details/872612/net-web-service-call-stuck-in-infinite-loop-due-to-exception-in-system-net-sockets описывает почему мы это сделали из-за ошибок в.NET. Мы получили gettin, когда предпочтение отдается окну IPv6.

Я удалил это имя хоста для преобразования IP-адреса, но теперь он вообще не подключается, и я получаю System.Net.Sockets Error: 0: [5788] Исключение в Socket # 31879635 :: EndConnect - была предпринята операция сокета к недостижимой сети 173.78.224.118:4443. даже если соединение пытается подключиться к URL-адресу с именем хоста, и мы можем перейти с устройства на этот URL-адрес и адрес имени узла с помощью браузера.

- ОБНОВЛЕНИЕ 2 -

Теперь он работает нормально в Windows 7, но не работает с Windows 8.1, получив ошибку операции сокета. Забавная часть Windows 7 - это виртуальная машина, работающая на машине Windows 8.1.

  • 0
    Просто чтобы уточнить, вы пытаетесь вызвать веб-сервис из кода, и именно здесь вы получаете ошибку сертификата? Вы упоминаете службу данных, это код, откуда вы пытаетесь вызвать веб-службу HTTPS?
  • 0
    Да, сервер Windows (извините, я назвал это хаббитом службы данных, потому что именно так мы его называем в офисе), написанный на C #, вызывающий веб-службу (asmx), написанную на C # через HTTS с использованием порта 4443 (не 443) Журнал System.Net.Trace файл - это то, что я включил выше, где говорится о несоответствии имени сертификата, когда мы используем URL myclient.mydomain.com, а сертификат предназначен для * .mydomain.com
Показать ещё 4 комментария
Теги:
ssl
web-services

1 ответ

1

Просто сделай что-нибудь вроде этого..

ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) =>
{
    //evaluate cert and return true if its ok
    return true;
});

Перед тем, как открыть клиент службы, поместите этот блок кода в свое приложение.

  • 0
    Ваша рекомендация вместе с остальной частью интернет-рекомендации IGNORE о том, что сертификат недействителен, является очень и очень плохой практикой.
  • 1
    @ChrisWard Я не рекомендую вам игнорировать сертификат, я рекомендую вам обработать ошибку, применяя логику в нужном месте.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню