Конференция "Сети" » вопросы по организации OpenSSL для Indy HTTP-сервера [D7, WinXP]
 
  • laao (22.05.08 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 © (22.05.08 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 (22.05.08 13:00) [2]

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


    можно подробнее ? :)
  • Reindeer Moss Eater © (22.05.08 13:12) [3]
    certificate authority флаг.
    то есть самоподписанный сертификат.
  • laao (22.05.08 18:28) [4]
    Ок, с генерацией разобрался, вместо родительского подсунул копию основного (как сделано в демке инди)

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

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

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

    Я впервые работаю с SSL. хотелось бы получить ответ "для чайника"
  • laao (22.05.08 19:00) [5]
    p.s. в процессе откатился на OpenSSL 0.9.6m, так как с последней версией получал ошибки
 
Конференция "Сети" » вопросы по организации OpenSSL для Indy HTTP-сервера [D7, WinXP]
Есть новые Нет новых   [134432   +19][b:0][p:0]