Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.01.10;
Скачать: CL | DM;

Вниз

вопросы по организации OpenSSL для Indy HTTP-сервера   Найти похожие ветки 

 
laao   (2008-05-22 12:38) [0]

добрый день

Вопрос по организации своего HTTPs канала.
Использую Delphi 7, Indy 10.1.5 и Win32OpenSSL 0.9.8g, поднят свой HTTP сервер (компонент TIdHTTPServer), пока без какого-либо шифрования.

Нужно "прикрутить" к нему OpenSSL. Обращаются к серверу только определенные мной клиенты, то есть никакого "общепризнанного" сертификата на нужно.

Свой сертификат генерирую так:
cipher /R:CERTNAME
openssl pksc12 -in CERTNAME.pfx -out CERTNAME.pem

1. Подскажите, нужно ли задавать пароли при создании ключей и сертификатов (если да, то где их указывать потом ?)

2. Где взять корневой сертификат, на который ссылается свойство SSLOptions.RootCertFile компонента TIdServerIOHandlerSSLOpenSSL - в книге "Indy in Depth/Глубины Indy" в переводе Подгорецкого предлагается получить его из Internet Explorer в диалоге Trusted Root Certificate Authority, но в случае создания своего сертификата это, наверное, делается как-то иначе

3. Что я должен дать клиентам, которым хочу разрешить доступ к своему серверу ? Как они зарегистрируют мои сертификаты (гугл предлагает много вариантов, из которых более достоверным кажется поместить файл в %UserProfile%\LocalSettings\CertStore) ?

4. Как я могу разрешить обращение к HTTP серверу с SSL шифрованием только пользователям, имеющим сертификат. Как я понимаю, нужно использовать TIdServerIOHandlerSSLOpenSSL.VerifyPeer, но что я могу проверить в обработчике ?.. в качестве входных параметров я получаю Certificate: TIdX509 и AOk: Boolean, не сравнивать же побайтно Certificate с какой-то своей строчной переменной ... или именно так все и делают ?


 
Reindeer Moss Eater ©   (2008-05-22 12:45) [1]

в случае создания своего ему надо задать флаг CA/

не сравнивать же побайтно

TIdX509 = class(TObject)
 protected
 ...
 public
   Constructor Create(aX509: PX509); virtual;
   Destructor Destroy; override;
   //
   property Fingerprint: TEVP_MD read RFingerprint;
   property FingerprintAsString: String read RFingerprintAsString;
   property Subject: TIdX509Name read RSubject;
   property Issuer: TIdX509Name read RIssuer;
   property notBefore: TDateTime read RnotBefore;
   property notAfter: TDateTime read RnotAfter;
 end;


 
laao   (2008-05-22 13:00) [2]


> в случае создания своего ему надо задать флаг CA/


можно подробнее ? :)


 
Reindeer Moss Eater ©   (2008-05-22 13:12) [3]

certificate authority флаг.
то есть самоподписанный сертификат.


 
laao   (2008-05-22 18:28) [4]

Ок, с генерацией разобрался, вместо родительского подсунул копию основного (как сделано в демке инди)

Остался вопрос

Как реализовать на сервере проверку сертификатов клиентов. то есть прерывать на уровне ТIdServerIOHandlerSSLOpenSSL запросы тех, у кого сертификат не установлен ?

Допустим, пользователь обращается к моему серверу через стандартный браузер. Сервер отдает по HTTPs XML-документ, который в этом браузере может быть просмотрен. Что мне нужно предварительно дать пользователю (публичный ключ, полный сертификат, в каком формате) и что проверять в событии VerifyPeer ?

Я впервые работаю с SSL. хотелось бы получить ответ "для чайника"


 
laao   (2008-05-22 19:00) [5]

p.s. в процессе откатился на OpenSSL 0.9.6m, так как с последней версией получал ошибки



Страницы: 1 вся ветка

Текущий архив: 2010.01.10;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
15-1257540544
TUser
2009-11-06 23:49
2010.01.10
Киев находится на широте Лондона


2-1258649675
Виктор
2009-11-19 19:54
2010.01.10
Использование данных таблицы Paradox в формировании шаблона


15-1257683780
McSimm
2009-11-08 15:36
2010.01.10
Апгрейд до Windows 7 возможен ?


6-1210671607
d@nger
2008-05-13 13:40
2010.01.10
Чтение файла по HTTP с помощью wininet.


3-1233121999
Merry
2009-01-28 08:53
2010.01.10
Запрос из 2 таблиц