Приложение Delphi 7 / Indy 9 не подключается к Apache через SSL - PullRequest
0 голосов
/ 28 марта 2012

У нас есть приложение, встроенное в Delphi 7, использующее Indy 9 для соединений https с PHP-сервером, работающее на PHP и Linux.Приложение подключается к нашему текущему производственному серверу без проблем.Мы создавали тестовую среду для этого приложения самостоятельно, и на тестовом веб-сервере оно отказывается подключаться по протоколу https.Приложение МОЖЕТ подключиться к этому серверу по протоколу http.Я могу подключить любой текущий браузер, используя те же самые веб-вызовы, которые делает приложение (я не пробовал старые браузеры), и я получаю соединение, и данные возвращаются отлично, так что, очевидно, в Indy 9 есть что-то, препятствующее работе (чтоВот почему этот вопрос здесь, а не на ServerFault. У кого-нибудь достаточно опыта работы с Indy / SSL, чтобы знать, что здесь происходит?

Вот несколько отличий, которые, как я думал, могут иметь какое-то влияние: 1. Я изначально запускалс подстановочным знаком.Это действительно и на правильном домене.Он работает со всем остальным, что есть на многих серверах.2. Подумав, что сертификаты с подстановочными знаками были более новыми, чем Indy 9, я удалил сертификат с подстановочными знаками и вставил самоподписанный сертификат с полным именем компьютера.Это не удалось таким же образом.НО, как вы знаете, браузеры выдают исключение сертификата с этими самозаверяющими сертификатами, поэтому я не был уверен, что это также вызовет проблемы в Indy.3. Я уверен, что версия OpenSSH на нашем новом сервере разработки более новая, чем та, которая в настоящее время находится на нашем производственном сервере.Я могу выкопать эти точные версии, если кто-то думает, что это поможет.

Это приложение, которое я унаследовал, поэтому мои знания SSL и Indy ограничены.Это приложение в конце своей жизни, поэтому обновление до Indy 10 не то, что моя компания собирается финансировать.Любая помощь или указатели или подсказки очень приветствуются, и моя благодарность будет бесконечной.Спасибо большое, Укладчики!

Ответы [ 2 ]

3 голосов
/ 28 марта 2012

Нет упоминания о конкретной ошибке, которая возникает, поэтому предлагать предложения без конкретного сообщения об ошибке сложно.

1) Отслеживать фактические ответы, которые вы получаете в рукопожатии SSL, и попытатьсясделать головы или хвосты сообщений.(DoStatusInfo ())

2) (Большая догадка здесь). SSL-соединения доступны в разных версиях, где более старые версии устарели и больше не рекомендуются для поддержки.Если вы создаете новый сервер, он, вероятно, имеет настройки по умолчанию, которые отличаются от текущей производственной машины, которую я предполагаю, чтобы быть намного более старой сборкой.(Чем оно старше, тем больше применимость этого предположения.) Мы надеемся, что более новые серверы должны отказываться от подключения к SSL V2 и V3 (и только разрешать TLS). Таким образом, это может быть разницей конфигурации старого производственного сервера и нового тестового сервераи эта новая отфильтровывает старые версии SSL и предотвращает продолжение рукопожатия.(Это будет показано при сбое рукопожатия в # 1, который является вашим реальным инструментом для ответа на этот вопрос.)

Вот краткий тест подключения с использованием openssl.exe.Попробуйте подключиться к тестовой коробке и производственному компьютеру, чтобы проверить, установлено ли подключение.Вы также можете попробовать v3, чтобы подтвердить или исключить эту догадку ... если они действуют одинаково, то сконцентрируйтесь на # 1.:)

openssl s_client -ssl2 -connect yourhost:443
2 голосов
/ 29 марта 2012

Попробуйте включить флаг sslvrfPeer в свойстве TIdSSLIOHandlerSocket.VerifyMode, а затем верните True в событии TIdSSLIOHandlerSocket.OnVerifyPeer.

...