|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Ошибка загрузки корневого сертификата
Есть такой код, который посылает запрос на удаленный сервер и получает от него ответ
Код:
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
|
||||
|
||||
Есть вероятность, что сертификат в не очень правильном формате. Попробуй сконвертировать его через openssl.
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#3
|
|||
|
|||
Цитата:
|
#4
|
|||
|
|||
странный у вас форум... хотел постануть в подходящей теме, однако меня отбрили, так как тема якобы устарела. зашибись. вопрос по сертификатам, точнее получения одного свойства из сертификата:
нужен план получения нужного значения из сертификата, то есть цепочка команд друг за другом какие должны быть. преамбула: у сертификатов есть определенные политики применения. например - идентификация клиента на сервере - 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 - закрываем хранилище |