var
IdHTTP: TIdHTTP;
Intercept: TIdConnectionInterceptOpenSSL;
begin
... // создание IdHTTP
... // создание Intercept
IdHTTP.Intercept := Intercept
end
Передача сообщений по HTTPS с SSL (Delphi7+Indy9.0.14)
Есть следующая задача: передавать и получать данные с помощью HTTPS. Есть в дельфях такая компонента как TIdHTTP, однако для секьюрного соединения к ней (через св-во Intercept) необходимо подключить объект класса TIdConnectionInterceptOpenSSL:
Код:
Компонента TIdHTTP присутствует в Indy Package, а TIdConnectionInterceptOpenSSL - нет, причем ее нет и в кодах библиотеки Indy. Однако, описание этого класса есть в специально подставляемых отдельно dll. В хелпах к этой компоненте сказано следующее:
Цитата:
TIdHTTP also supports the Secure Hypertext Transport protocol (HTTPS) <...>
Assign an instance of TIdConnectionInterceptOpenSSL to the Intercept property to allow use of the HTTPS protocol. For the Windows platform, you must install the Indy OpenSSL support. <...>
The TIdConnectionInterceptOpenSSL intercept class implements the Open SSL implementation of Secure Sockets Layer through support .DLL's available at http://www.intelicom.si/. You have to deploy these support .DLL's in order to use this component's functionality in your application. To do this, we recommend that you install the .DLL's in the user's system directory.
Assign an instance of TIdConnectionInterceptOpenSSL to the Intercept property to allow use of the HTTPS protocol. For the Windows platform, you must install the Indy OpenSSL support. <...>
The TIdConnectionInterceptOpenSSL intercept class implements the Open SSL implementation of Secure Sockets Layer through support .DLL's available at http://www.intelicom.si/. You have to deploy these support .DLL's in order to use this component's functionality in your application. To do this, we recommend that you install the .DLL's in the user's system directory.
Собственно вопросы:
1. Как получить из dll определение класса?
2. Как зарегистрировать файл сертификата и указать эту регистрацию компоненте TIdConnectionInterceptOpenSSL?
1. В новой версии Indy компонент вместо Interceptor свойства используется св-во IOHandler. К нему можно подключить TIdSSLIOHandlerSocket.
2. У элемента TIdSSLIOHandlerSocket есть поля CertFile и RootCertFile, куда и прописываются соответствующие файлы сертификатов
пол недели бился с этим. весь инет излазил.
правда теперь почему - то файл с ключем не читается.
спасибо
IdSSLIOHandlerSocket.SSLOptions.CertFile
IdSSLIOHandlerSocket.SSLOptions.RootCertFile
IdSSLIOHandlerSocket.SSLOptions.KeyFile
куда что прописывать ? не известно.
когда прописываю пришедший сертификат в одно из полей выскакивает ошибка EIdOSSLLoadingCertError 'Could not load certificate'
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.CertFile:='s1.pem';
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.KeyFile:='s2.pem';
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.RootCertFile:='s3.pem';
Цитата: Аббат
Прописывай следующее
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.CertFile:='s1.pem';
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.KeyFile:='s2.pem';
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.RootCertFile:='s3.pem';
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.CertFile:='s1.pem';
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.KeyFile:='s2.pem';
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.RootCertFile:='s3.pem';
Ишь как лихо !
Вообще-то все зависит от того, какие у Вас сертификаты имеются - *.crt (с ключом *.key) или *.pem.
Цитата: Hrew
Ишь как лихо !
Вообще-то все зависит от того, какие у Вас сертификаты имеются - *.crt (с ключом *.key) или *.pem.
Вообще-то все зависит от того, какие у Вас сертификаты имеются - *.crt (с ключом *.key) или *.pem.
Впринципе я согласен, но это самый простой вариант.
Цитата: Аббат
Прописывай следующее
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.CertFile:='s1.pem';
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.KeyFile:='s2.pem';
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.RootCertFile:='s3.pem';
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.CertFile:='s1.pem';
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.KeyFile:='s2.pem';
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.RootCertFile:='s3.pem';
Где s1,s2,s3-твои сертификаты