Я делаю вызов веб-службы из службы 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.
Просто сделай что-нибудь вроде этого..
ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) =>
{
//evaluate cert and return true if its ok
return true;
});
Перед тем, как открыть клиент службы, поместите этот блок кода в свое приложение.