Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.08.2013, 15:00
foxm foxm вне форума
Прохожий
 
Регистрация: 26.08.2013
Сообщения: 2
Версия Delphi: Delhi
Репутация: 10
По умолчанию Ошибка загрузки корневого сертификата

Есть такой код, который посылает запрос на удаленный сервер и получает от него ответ
Код:
 http := TIdHTTP.Create(nil); //создание экземпляра протокола http
 ssl := TIdSSLIOHandlerSocketOpenSSl.Create(http); //создание ssl на основе http
 SSL.SSLOptions.RootCertFile :='1.pem'; //корневой сертификат
 SSL.SSLOptions.CertFile := '2.crt'; //сертификат выданный нам центром сертификации//наш публичный ключ
 SSL.SSLOptions.KeyFile := '3.key'; //наш приватный ключ
 http.IOHandler := ssl; 
 HTTP.ProxyParams.ProxyServer:='...';
 HTTP.ProxyParams.ProxyPort:=...;
 try
 try
 params.Text := n;
 responseres.Text := http.Post('https://...", params);

 except
 on E : Exception do
 begin
 ShowMessage('Ошибка! Заголовок ответа: ' + http.Response.RawHeaders.CommaText+'!'+e.Message);
 end;
 end;
 finally
 SSL.Free;
 HTTP.Free;
 end;
Админ: Пользуемся тегами для оформления кода.

При первом запуске программы код отрабатывает правильно, но при повторном обращении к серверу выдает ошибку

could not load root certificate error:0B084002:x509 certificate routines:X509_load_cert_crl_file:system lib

Если программу перезапустить, то сначала отрабатывает снова нормально, а потом опять ошибка...

Хотелось бы понять, в чем причина ошибки и как ее устранить.

Delphi XE2 16.0.4429.46931

Последний раз редактировалось Admin, 01.09.2013 в 14:37.
Ответить с цитированием
  #2  
Старый 26.08.2013, 16:26
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Есть вероятность, что сертификат в не очень правильном формате. Попробуй сконвертировать его через openssl.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #3  
Старый 26.08.2013, 16:55
foxm foxm вне форума
Прохожий
 
Регистрация: 26.08.2013
Сообщения: 2
Версия Delphi: Delhi
Репутация: 10
По умолчанию

Цитата:
Сообщение от PhoeniX
Есть вероятность, что сертификат в не очень правильном формате. Попробуй сконвертировать его через openssl.
Можно поподробнее куда его конвертировать ?
Ответить с цитированием
  #4  
Старый 08.09.2013, 15:44
SeregaZ SeregaZ вне форума
Прохожий
 
Регистрация: 08.09.2013
Сообщения: 1
Версия Delphi: PB
Репутация: 10
По умолчанию

странный у вас форум... хотел постануть в подходящей теме, однако меня отбрили, так как тема якобы устарела. зашибись. вопрос по сертификатам, точнее получения одного свойства из сертификата:

нужен план получения нужного значения из сертификата, то есть цепочка команд друг за другом какие должны быть.

преамбула: у сертификатов есть определенные политики применения. например - идентификация клиента на сервере - oid 1.3.6.1.5.5.7.3.2. они, насколько я понял, читаются из поля "улучшенный ключ командой CertGetEnhancedKeyUsage - она возвращает массив этих oid, которые имеются у этого сертификата. этот момент я написал и работает, я доволен. НО! в случае когда у сертификата стоит свойство - "Все политики применения", то фактически поле "улучшенный ключ" у сертификата отсутствует, и соответственно моя команда CertGetEnhancedKeyUsage не будет работать, возвращает 0 и все тут.

вот собственно вопрос - каким образом мне получить свойство "Все политики применения"? какой порядок команд должен быть?

сейчас:
1. CertOpenSystemStore - открываем нужное хранилище в системе, например мои личные сертификаты.
2. CertEnumCertificatesInStore - гоняем в цикле по хранилищу, получая каждый сертификат в отдельности
3. CertGetEnhancedKeyUsage - первый раз получаем размер массива
4. CertGetEnhancedKeyUsage - второй раз получаем уже сам массив
5. читаем этот массив гоняя в цикле количества элементов.
6. CertCloseStore - закрываем хранилище

это краткий план получения oid 1.3.6.1.5.5.7.3.2 - "идентификация клиента на сервере", вот мне нужен точно такой-же, но для получения флага "Все политики применения". то есть что-то типа:
1. CertOpenSystemStore - открываем нужное хранилище в системе, например мои личные сертификаты.
2. CertEnumCertificatesInStore - гоняем в цикле по хранилищу, получая каждый сертификат в отдельности
3. CertGetEnhancedKeyUsage - если размер ноль, значит нужно искать "все политики"
4. блаблабла - эта самая команда для всех политик
5. CertCloseStore - закрываем хранилище
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:39.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter