Для начала использовал программу TinyCA умеет многое и почти всё что нужно, единственно что не умеет (или я не разобрался как) делать иерархию подписывания, т.е. сертификат cert1 подписан certca, а сертификат cert2 подписан сертификатом cert1… Плюс неожиданно обнаруженная бага, при которой при экспорте сертификата в pkcs#12 для импортирования его в Windows, последний не импортируется.
Написана прога на PyGTK.
Поиски навели на проект XCA. Написан на QT4, при компиляции потребовались небольшие шаманства с файлом lib/x509rev.cpp конкретно потребовалось сделать следующее (в формате diff):
--- x509rev.cpp.orig 2008-10-02 13:19:11.000000000 +1100 +++ x509rev.cpp 2008-10-02 13:41:39.000000000 +1100 @@ -7,16 +7,21 @@ #include "x509rev.h" -#if OPENSSL_VERSION_NUMBER >= 0x00908000L -#define X509_REVOKED_dup(x5r) \ - ASN1_dup_of (X509_REVOKED, i2d_X509_REVOKED, d2i_X509_REVOKED, x5r) +//#if OPENSSL_VERSION_NUMBER >= 0x00908000L +//#define X509_REVOKED_dup(x5r) \ +// ASN1_dup_of (X509_REVOKED, i2d_X509_REVOKED, d2i_X509_REVOKED, x5r) +// +//#else +//#define X509_REVOKED_dup(x5r) (X509_REVOKED *)ASN1_dup( \ +// (int (*)(...))i2d_X509_REVOKED, \ +// (char *(*)(...))d2i_X509_REVOKED, \ +// (char *)x5r) +//#endif -#else #define X509_REVOKED_dup(x5r) (X509_REVOKED *)ASN1_dup( \ - (int (*)(...))i2d_X509_REVOKED, \ - (char *(*)(...))d2i_X509_REVOKED, \ + (i2d_of_void *)i2d_X509_REVOKED, \ + (d2i_of_void *)d2i_X509_REVOKED, \ (char *)x5r) -#endif x509rev::x509rev() {
У кого-то наверное запустится и без этого, ибо чует моё сердце здесь многое зависит от версии компилятора и/или библиотеки OpenSSL.
Ну краткий обзор… Да управление не такое удобное как у TinyCA, хотя, возможно, это дело привычки. Но, как показалось, более функциональное. И при этом умеет иерархию. Старый корневой сертификат и ключ заимпортировал, на основе их делаю подписи. Вся база хранится в зашифрованном виде в единственном файле (база данных, подозреваю, что возможны случаи поломки всего этого дела), но возможен дамп базы, и будут по каталогам разложены сертификаты, реквесты и т.д.
Пока юзаю и разбираюсь. Время покажет.
Дискуссия