База сертификатов OpenSSL

Huckster

Guest
База сертификатов OpenSSL

Добрый день, уважаемые коллеги.

Есть вопрос:

как известно, свою базу СА OpenSSL хранит в текстовом файле.
Хотелось бы реализовать хранение в базе. Сложностей с тем, чтобы сгенерить, подписать сертификат и положить его в базу - нет. Но не вижу нормального пути сгенерировать список отзыва.

Мыслей по этому поводу две: составлять самому по байту на основе RFC или сгенерировать этот индексный файл для OpenSSL на основе данных из базы.

Реализация первой мысли представляется мне слишком уж сложной, а второй - шаманством.

Может, кто даст мне по этому поводу дельный совет?

Спасибо.

-~{}~ 28.04.05 16:33:

Позволю себе разок апнуть, но надежда слабая....

-~{}~ 03.05.05 01:08:

Большая просьба к модераторам, переместите в "Продвинутые", там не так быстро уезжает, может, найдется человек, решавший этот вопрос уже.
 

Alexandre

PHPПенсионер
попутный вопос: зачем? чтоб повысить безопастность, так файлы .pem и так зашифрованны
а если есть стороннему лицу возможность доступа к ним, то вероятность ему же залезть в БД не меньше

пакет OpenSSL ориентирован на использование ключей в текстовом формате. У тебя есть третий вариант, который, так же попахивает шаманством, изменить код самого OpenSSL чтоб он хранил сертификаты в БД.
 

Huckster

Guest
>так же попахивает шаманством, изменить код самого OpenSSL чтоб он хранил сертификаты в БД.

Вот-вот. Но уровня знаний в C++ у меня для этого не хватит.

>зачем?

Да элементарно, корпоративный центр сертификации. Что же, вместо удобных запросов к базе парсить index.txt?
А если, особенно, он разрастется до неудобных размеров?

Это не сложно, сложно сгенерить CRL самому. Требует очень глубоких познаний ASN1 и прочих DER-XER-и т.д. Вот это - загвоздка.

В сущности, основная задача - управление (выдача, отзыв, генерация CRL) сертификатами через веб.

Для чего?
На предприятии порядка 2000 пользователей. Из них порядка 200-300 - быстро меняются, текучка, так сказать. У каждого - сертификаты для EFS и почты. +Руководство поставило задачу реализовать IPSEC, местами с шифрованием трафика. Все уже сделано, но!
Есть принцип: не использовать IIS. Руководство каРЕГОТИЧЕски против.

А есть 6 удаленных подсетей. Для этого, в основном, и нужен веб-интерфейс.

В общем, основная задача - управление через веб, а исходя из вышеуказанного принципа, можно использовать, например, для CA FreeBSD+OpenSSL, вместо w2k3+Certificate Server. Вот такая маразматическая задача. Пытаюсь решить уже полгода :)

P.S. Простите, если бестолково сформулировал, немного выпил.
 

Alexandre

PHPПенсионер
интерестная задача, как я вижу ты в OpenSSL съел уже собаку :)
 

slach

Новичок
может я чего не понял

что мешает
а) хранить данные сертификатов в файлах
б) ссылки на эти файлы и соответсвие "юзер-сертификат" хранить в базе
в) конфигурацию и настройки apache хранить где нибудь в LDAP и сертификат там прописывать для виртуального хоста...

вот как то так?!
 

Huckster

Guest
>наверно в этом проблема?

Alexandre
Да, в этом. Ведь этот файл только растет. Данные о сертификатах удаляются из него только после экспайра.

>а) хранить данные сертификатов в файлах
>б) ссылки на эти файлы и соответсвие "юзер-сертификат" хранить в базе

slach
Незачем. Уже сделано так, что сертификат полностью раскладывается на свойства и расширения и аккуратно складывается в таблицу с соотв. полями. Потом достается и собирается. Проблема не в том, как хранить в базе, а как на основе данных из базы о выданных и отозванных сертификатах создать Certificates Revocation List, будь он неладен.

Была еще мысль - вести базу параллельно файлу index.txt
Тогда и CRL будет генерироваться, и на этот файл можно просто забить, так как ни для чего другого он будет не нужен. В принципе - это есть решение, но в идеале хочется обойтись вообще без этого файла.
 

slach

Новичок
увы... видимо не без файла не обойтись
ведите паралельно
пишите утиль который генерит этот самый index.txt
IMHO это нормально и более или менее праввильно

напрямую из базы сам по себе OpenSSL насколько я понимаю, НЕ МОЖЕТ =)
 

Huckster

Guest
>пишите утиль который генерит этот самый index.txt

Таким образом получилось все требуемое реализовать. Но тут получилось и класс написать для создания CRL.

Чтобы не собирать самому всю ASN1-структуру (учитывая незнание), сделал так: там изменяются только thisUpdate,nextUpdate,crlNumber,revokedCertificates и, конечно signature. Все остальное(расширения и иже с ними) остается неизменным, поэтому обрабатывать это дополнительно не нужно.

Собирается целиком контейнер toBeSigned, потом подписывается с помощью openssl_sign и подпись прикладывается. Все.

До ума вот доведу, может быть и дадут добро внедрить.
 
Сверху