Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.007 c
15-1257541254
Игорь Шевченко
2009-11-07 00:00
2010.01.10
Дмитрий Заварзин aka Думкин, с днем рождения!


15-1257285891
McSimm
2009-11-04 01:04
2010.01.10
Об упорных червяках и математике


15-1257489395
vajo
2009-11-06 09:36
2010.01.10
Как астрономы добиваются такой точности?


15-1257712925
POOP
2009-11-08 23:42
2010.01.10
При отражении длина световой волны меняется?


2-1258031503
kyn66
2009-11-12 16:11
2010.01.10
Строку в объект




   Наверх