Эта ошибка возникла в работающем приложении C # после переноса веб-сайта на новый сервер, что указывало на проблему на стороне сервера. Действительно, мы наконец решили эту проблему, установив значение «ServerName» в файле конфигурации Apache, чтобы оно совпадало с именем домена, зарегистрированным в сертификате. (Другой форум упоминал, что настройка «ServerAlias» также будет работать.)
В частности, файл httpd.conf для сайта SSL содержал в разделе VirtualHost следующее:
ServerName www.secure.mydomain.com
Сертификат был зарегистрирован на secure.mydomain.com
, и URL-адрес, к которому мы обращались, также был https://secure.mydomain.com/test.html
.
Итак, просто изменив файл conf на следующий и перезапустив Apache, добились цели:
ServerName secure.mydomain.com
Следующее также сработало бы, скорее всего:
ServerName www.secure.mydomain.com
ServerAlias secure.mydomain.com
Вот некоторая дополнительная справочная информация для дальнейшего использования:
Две ошибки, которые мы видели в System.Net.trace.log:
System.Net.Sockets Error: 0 : [4316] Exception in the
Socket#18796293::Receive - A blocking operation was
interrupted by a call to WSACancelBlockingCall
System.Net Error: 0 : [4316] Exception in the
HttpWebRequest#35191196:: - The operation has timed out
Вот все, что мы попробовали, но это не помогло решить проблему:
- установка промежуточных сертификатов от поставщика сертификатов SSL в Apache (это необходимо)
- изменение пользовательского агента в веб-запросе (без эффекта)
- изменение тайм-аутов и ограничений памяти на стороне сервера и на стороне клиента (без эффекта)
- тестирование со статической страницей (без эффекта)
- тестирование с другими сайтами https (они работали нормально)
- добавление сертификата в хранилище доверенных сертификатов (без эффекта)
- покупка и установка сертификата у другого эмитента сертификата (безрезультатно)
- сравнить файлы .conf виртуального хоста с известного рабочего сервера с проблемным сервером (это привело нас к решению проблемы)
URL-адрес https может быть открыт в Opera, IE8 и Firefox без каких-либо проблем. WGET для Windows пожаловался на недействительный сертификат, но опять же, WGET является старым приложением и, похоже, не доверяет так много сертификатов.
Клиентское приложение C # работало в Windows XP, но не в Windows 7 или Windows Vista. Похоже, что Windows 7 и Vista более агрессивно относятся к проверке сертификата. Они не выдают информативное сообщение об ошибке, когда оно выходит из строя, и вместо этого просто тайм-аут во время рукопожатия SSL.