-
Как создать файлы "Certificate Request" и "Private key" (PEM, X509), желательно с помощью Indy10 (работает же он с ними, значит должен и создавать. ???). Есть вариант с компонентами от SecureBlackbox, но к ним исходников нет, т.что ... не хочу использовать.
Т.е. это файлы, из которых "Certificate Request" посылается на сервер, в ответ приходит сертификат, который в паре с "Private key" позволяет коннектиться по SSL.
-
> работает же он с ними, значит должен и создавать. ?
Разве ?
> SecureBlackbox..не хочу использовать
Можно воспользоваться OpenSSL, если отсутствие GPL стало камнем преткновения
-
Средствами крипто-апи с последующим кодированием запроса в base64 с перфиксами и постфиксами. Это если речь идет о запросе к ценру сертификации с веб интерфейсом. Сертификат из запроса можно сделать теми же средствами криптоапи. Вся загвоздка в том, проглотит ли конкретная реализация openssl сертификаты в таком виде. С системными хранилищами оно вроже как не работает, плюс сам приватный ключ должен быть в виде простого дискового файла, контейнеры криптопровайдеров в рабочем состоянии в таком виде не живут.
-
> Разве ? Ну, у него есть обьект TIdX509, он в нем передает открытый сертификат, у него есть конструктор Create... в общем можно предположить, что должен не только открывать. Но Create получает на вход структуру в виде Pointer-а, а описания самой структуры не нашел, впрочем и функций экспорта приватной части ключа тоже нет. Т.что... Но может не описано просто.
> Можно воспользоваться OpenSSL, А что думаешь Indy использует? (это опять к "Разве?") Есть предложение как ими воспользоваться? Писать dll-кам обертку с 0? Я пас.
> если отсутствие GPL стало камнем преткновения ??? А при чем тут генеральная лицензия? Если это намек на использование публичных сертификатов вместо "самоподписанных" то это не мне решать, мне нужно просто получить доступ к такому центру, он работает так и не иначе, и ничего менять не собирается (но это не повод чтобы нам с ним не работать, или "права качать" типа сделайте "правильно").
> Это если речь идет о запросе к ценру сертификации с веб интерфейсом. Именно об этом, но веб интерфейса как такового нет, просто у них так доступ лимитируется.
> Сертификат из запроса можно сделать теми же средствами криптоапи. > Вся загвоздка в том, проглотит ли конкретная реализация openssl сертификаты в таком виде. Вот я тоже сомневаюсь. Времени уйдет много, а в итоге будет пшик, либо геморрой с попытками "подогнать".
> С системными хранилищами оно вроже как не работает, А с системными и не надо. Даже чистый PEM не нужно (там где сертификат объединен с ключом), для работы нужно 2 файла, вот этот сгенеренный вместе с запросом "Private key" и тот сертификат что они вышлют. Тестовая "пара" полученная "руками" без проблем работает (и кстати вроде Indy и не может по другому, только с раздельными файлами), вопрос в том чтобы это получение автоматизировать.
-
ну пем это тот же der, но кодированный в base64 + специфичные префиксы. для этого можно использовать CryptBinaryToString + флаг CRYPT_STRING_BASE64REQUESTHEADER (для запроса на сертифкат)
Остается только решить вопрос экпорта контейнера в транспортный формат. Сделать это просто, но опять вопрос - скушает ли его openssl
-
Но Create получает на вход структуру в виде Pointer-а, а описания самой структуры не нашел
Вероятно это простой PCCERT_COTEXT который и есть простой пойнтер на
typedef struct _CERT_CONTEXT { DWORD dwCertEncodingType; BYTE* pbCertEncoded; DWORD cbCertEncoded; PCERT_INFO pCertInfo; HCERTSTORE hCertStore; } CERT_CONTEXT,
-
> sniknik © (17.08.09 23:44) [3]
> Есть предложение как ими воспользоваться? Писать dll-кам > обертку с 0? Я пас.
Не надо ничего писать. Indy и так прекрасно работает с OpenSSL.
-
> Indy и так прекрасно работает с OpenSSL. Работает? Да. Но вот про создание с его помощью указанных файлов, я ни примеров ни даже намеков как делать не нашел, что и странно. Ведь это тоже часть работы - запрос сертификата. Везде примеры, вот вроде этого. http://www.delphifaq.com/faq/apache/f2798.shtmlС использованием утилиты из OpenSSL, а не того же самого программно. А у того же SecureBlackbox-а, хотя и есть примеры с использованием своих модулей (там даже dll-ки "опен сслные" не требуются) но все без исходников (dcu), т.е. истинный черный ящик... Даешь на вход инфу на выходе получаешь файлы. Как будто тайна сие великая есть, их создание... Получается, что остается только присмотреть исходники самой утилиты, чтобы узнать какие функции из dll-ек используются, и каким образом, ну и использовать их, невзирая на Indy.
-
> Писать dll-кам обертку с 0?
Зачем dll-кам ? Прямо к консольному openssl.exe обертку - это же намного проще.. Взять ossl-консоль можно хоть из ovpn хоть из cygwin
-
> Зачем dll-кам ? А, что ты предлагал? Ты же не сказал утилиты OpenSSL. Для меня это распространяемые dll. (вот Indy например использует OpenSSL, и в документации так написано, но никакими утилитами там не пахнет, только dll)
> Прямо к консольному openssl.exe обертку - это же намного проще.. И чем это проще(вернее лучше) использования закрытого компонента? Утилита также закрыта, а обрабатывать ее ошибки гораздо сложнее. Не вариант в общем.
-
> чем это проще(вернее лучше) использования закрытого компонента?
Ну как чем ? Исходники есть ? Есть. Раппер к консоли писать проще чем к библиотеке ? Проще.
> Утилита также закрыта
Ну где же закрыта-то ? Оба упомянутых мной проекта - Open, оба вполне себе документированы, исходники доступны, так что тут комар носа не подточит, если речь идет о лицензировании прав на использование утилит.
> обрабатывать ее ошибки гораздо сложнее
Ну если уж для тебя оно так сложно, то у меня по этому поводу вряд ли найдутся комментарии/советы)
-
> Ну где же закрыта-то ? > Оба упомянутых мной проекта - Open Упомянутый мной OpenSSL, с собственными утилитами тоже имеет исходники, но ты пробовал их читать? Я пробовал... найти там что то не разбираясь досконально в этом вопросе нереально. А я не хочу становится докой в этом вопросе, он для меня "проходной", основная задача не в этом. А насчет документации... да я видел, полная как же... над каждым пунктом дополнение - STILL INCOMPLETE.
Но вообще вопрос не в том, вопрос как упростить то, что есть, а не усложнить.
> Ну если уж для тебя оно так сложно, то у меня по этому поводу вряд ли найдутся комментарии/советы) Я не говорил, что это сложно, я говорил, что это сложнее. Разница однако.
-
> [11] sniknik © (18.08.09 17:06)
Тебе именно с помощью OpenSSL нужно или CryptoAPI тоже пойдет?
-
способы просто жестоко отличаются :)
-
Сразу говорю, создать запрос на сертификат и подписать его центром авторизации на КриптоАПИ 10 мин работы :)
-
а без центра - 5 минут :)
-
:) угу
-
> Тебе именно с помощью OpenSSL нужно или CryptoAPI тоже пойдет? Мне все одно, мне главное чтобы его центр принял, понял, и выслал мне сертификат. (центр это не ЦЕНТР, и даже не Центр, а именно центр, мелкая контора которая сама подписывает сертификаты (и на которые IE плюется если их в него пытаться установить, но это и не нужно))
> Сразу говорю, создать запрос на сертификат и подписать его центром авторизации на КриптоАПИ 10 мин работы :) Подписывать не надо, это дело другой стороны, как они это делают мне без разници, мне нужно создать ключ, + запрос и ждать ответа... :) Если еще до сих пор неясно, это файлы начинающиеся один с -----BEGIN RSA PRIVATE KEY----- и второй с -----BEGIN NEW CERTIFICATE REQUEST----- первый остается, второй отсылается, дальше его судьба неясна, но в ответ приходит по почте файл. Ну вот такая там логика работы (получение доступа). -----BEGIN CERTIFICATE----- и он уже в паре с ключем открывет доступ по ssl (https).
> а без центра - 5 минут :) Ну если это так просто, то давай, я завтра проверю подошло оно или нет.
Кстати, с блэкбоксом я уже один получил, т.е. есть уже рабочая схема, будет с чем сравнивать при проверке.
-
> sniknik © (18.08.09 17:06) [11]
> пробовал их читать?
Я похож на маньяка ? Нет конечно) А зачем их собсно читать ? Если "центр" не примет то что эти исходники настрогали , не будешь же ты их достругивать, я надеюсь ?) А если примет, то чем не решение ?)
> не хочу становится докой в этом вопросе
Не хочу без исходников, не хочу быть докой - хочу чтобы оно само нахаляву и по щучьему веленью) ..
Так не бывает)
И вечно трижды сырой Инди тоже, замечу, не панацея, если вопрос стоит именно так.
-
Подписывать не надо, это дело другой стороны, как они это делают мне без разници, мне нужно создать ключ, + запрос и ждать ответа... :)
Запрос точно так же подписывается приватным ключем того, кто делает запрос.
Если еще до сих пор неясно, это файлы начинающиеся один с -----BEGIN RSA PRIVATE KEY----- и второй с -----BEGIN NEW CERTIFICATE REQUEST----- первый остается, второй отсылается, дальше его судьба неясна, но в ответ приходит по почте файл. Ну вот такая там логика работы (получение доступа). -----BEGIN CERTIFICATE----- и он уже в паре с ключем открывет доступ по ssl (https).
второй отсылается в центр. проверяется там на валидность эцп, дальше из него извлекается информация о сабджекте (владельце) и открытый ключ. Затем на основе всего этого создается сертификат, в него помещается инфа об издателе и на все это дело в конце накладывается эцп самого издателя.
дальше он пересылается обратно тому, кто его запросил. а запросивший использует его в паре со своим приватным ключом.
-
При создании запроса в криптоапи порядок примерно такой:
готовим инфомацию о владельце с помощью CertStrToName получаем контекст своего приватного контейнера через CryptAcquireContext получаем открытый ключ через CryptExportPublicKeyInfo заполняем структуру CERT_REQUEST_INFO используя данные из предыдущих шагов уточняем алгоритмы и спецификации ключей для котрых выпускается сертификат (AT_KEYEXCHANGE или AT_SIGNATURE. Впрочем в случае с RSA возможно используются другие спецификации) завершающий этап - вызов CryptSignAndEncodeCertificate
при этом получаем закодированный в der запрос. применяем к нему CryptStringToBinary с флагом CRYPT_STRING_BASE64REQUESTHEADER для преобразования der в base64 с нужным префиксом типа BEGIN NEW CERTIFICATE REQUEST сохраняем полученное в файл или прямо отсылаем http-пост запросом
-
Нашел статью, http://citforum.novgorod.ru/security/articles/delphi/Правда она "кривая", Wcrypt2.pas на котором примеры показаны устарел, константы "недоопределены" (не сходятся с примером), функций не хватает, а в новом от jedi-api уже все описания поменялись (вместо поинтеров var например, и т.д.), поправленный "на скорую руку" не заработал в общем. Но в принципе ясно, что и с криптоапи нужные мне файлы все таки можно сделать. Только не в 5 мин естественно (любят же у нас "пальцы погнуть..." :(, а смысл?). В общем есть с чем на выходные заняться. Спасибо за помощь.
|