Форум: "Сети";
Текущий архив: 2010.01.10;
Скачать: [xml.tar.bz2];
Внизвопросы по организации 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c