2017-01-14 17 views
0

Как подключиться к серверу с использованием OpenSSL и Delphi? Я не уверен, нужен ли мне IOHandler, например TIdSSLIOHandlerSocketOpenSSL.Как подключиться к серверу с использованием OpenSSL и Delphi, не уверен, нужен ли мне IOHandler, например IdSSLIOHandlerSocketOpenSSL1

В настоящее время сервер не выполняет аутентификацию клиента на уровне TLS. Таким образом, сертификаты клиентов не требуются. Стандартный сервер X.509 v3, подписанный сторонним ЦС (центром сертификации), используется сервером.

Я скопировал DLL OpenSSL в папку своего приложения.

Я могу подключиться к серверу без использования IOHandler. Я не уверен, что это защищенная связь или нет.

Без IOHandler он прекрасно соединяется, но я не знаю, надежно ли он подключен. Вот код:

procedure TFrmMain.Button1Click(Sender: TObject); 
begin 
    With IdSSLIOHandlerSocketOpenSSL1 do 
    begin 
    Destination := 'dev-eclaimsrx.relayhealth.com:18009'; 
    Host := 'dev-eclaimsrx.relayhealth.com'; 
    Port := 18009; 
    SSLOptions.Method := sslvTLSv1_2; 
    end; 

    IdTCPClient1.IOHandler := IdSSLIOHandlerSocketOpenSSL1; 
    IdTCPClient1.Host := 'dev-eclaimsrx.relayhealth.com'; 
    IdTCPClient1.Port := 18009; 
    IdTCPClient1.Connect; 
end; 
+1

Пожалуйста, покажите свой фактический код для подключения к серверу. 'TIdIOHandlerSocketOpenSSL' является компонентом Indy. Вы используете Indy для подключения к серверу? –

+0

Только что отправил фактический код, он соединяется с обработчиком, не уверен, если он надежно подключен. – user734781

+0

Вам не нужно и не следует устанавливать свойства «Место назначения», «Хост» и «Порт» IOHandler. Это обрабатывается 'Connect()' внутренне. –

ответ

0

Это безопасно только в том, что передача данных шифруются между клиентом и сервером и не может быть перехвачена, но не в полной безопасности, так как клиент не проверяет идентичность сервера. Для этого вам необходимо включить флаг sslvrfPeer в свойстве TIdSSLIOHandlerSocketOpenSSL.SSLOptions.VerifyMode (и необязательно флаг sslvrfFailIfNoPeerCert), а также проверить значения сертификата сервера в событии TIdSSLIOHandlerSocketOpenSSL.OnVerifyPeer.

+0

Обратите внимание, что он надежно зашифрован ** ТОЛЬКО ЕСЛИ ** TIdIOHandlerSocketOpenSSL присваивается свойству 'TIdTCPClient.IOHandler', а для свойства' TIdIOHandlerSocketOpenSSL.PassThrough' установлено значение False. –

+0

Спасибо, что нашли время ответить на мой вопрос, я проверил все ваши предложения. Я все еще получаю сообщение об ошибке «Ошибка подключения к SSL, наблюдалось EOF, которое нарушает протокол« Удивление, если я что-то упустил? – user734781

+1

@ user734781 какая версия OpenSSL вы используете? У меня была ошибка, которую вы описываете со старым 1.0.0. С 1.0.1m он успешно подключился – EugeneK

 Смежные вопросы

  • Нет связанных вопросов^_^