Для начала использовал программу 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
@@ -7,16 +7,21 @@
#include "x509rev.h"
-#if OPENSSL_VERSION_NUMBER >= 0x00908000L
-#define X509_REVOKED_dup(x5r) <br/>
1. ASN1_dup_of (X509_REVOKED, i2d_X509_REVOKED, d2i_X509_REVOKED, x5r)
+//#if OPENSSL_VERSION_NUMBER >= 0x00908000L
+//#define X509_REVOKED_dup(x5r) <br/>
+// ASN1_dup_of (X509_REVOKED, i2d_X509_REVOKED, d2i_X509_REVOKED, x5r)
+//
+//#else
+//#define X509_REVOKED_dup(x5r) (X509_REVOKED *)ASN1_dup( <br/>
+// (int (*)(...))i2d_X509_REVOKED, <br/>
+// (char *(*)(...))d2i_X509_REVOKED, <br/>
+// (char *)x5r)
+//#endif
-#else
#define X509_REVOKED_dup(x5r) (X509_REVOKED *)ASN1_dup( <br/>
1. (int (*)(...))i2d_X509_REVOKED, <br/>
2. (char *(*)(...))d2i_X509_REVOKED, <br/>
+ (i2d_of_void *)i2d_X509_REVOKED, <br/>
+ (d2i_of_void *)d2i_X509_REVOKED, <br/>
(char *)x5r)
-#endif
x509rev::x509rev()
{
У кого-то наверное запустится и без этого, ибо чует моё сердце здесь многое зависит от версии компилятора и/или библиотеки OpenSSL.
Ну краткий обзор… Да управление не такое удобное как у TinyCA, хотя, возможно, это дело привычки. Но, как показалось, более функциональное. И при этом умеет иерархию. Старый корневой сертификат и ключ заимпортировал, на основе их делаю подписи. Вся база хранится в зашифрованном виде в единственном файле (база данных, подозреваю, что возможны случаи поломки всего этого дела), но возможен дамп базы, и будут по каталогам разложены сертификаты, реквесты и т.д.
Пока юзаю и разбираюсь. Время покажет.