Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Добавл. расш-я CRLdist..points в сертификат X509


Автор: ifomin 27.3.2014, 10:21
Добрый день. 
Решаю задачу по созданию сертификата X509, возникает одна ошибка: когда я добавляю рсширение CRLDistributionPoints, то добавление выполняется некорректно. Использую openssl.

Ниже привожу фрагменты кода.

Код

DIST_POINT *dp;
STACK_OF(DIST_POINT) *dps;
GENERAL_NAME *gn;
X509 *x;
char val[256]; /*строка с данными */
int j;
...................................


dps = sk_DIST_POINT_new_null();
if(!dps)
{
    /*ошибка выделения памяти*/
        goto end;
}
dp = DIST_POINT_new();
if(!dp)
{
    /*ошибка выделения памяти*/
        goto end;
}
dp->distpoint = DIST_POINT_NAME_new();
dp->distpoint->name.fullname = sk_GENERAL_NAME_new_null();
if(!dp->distpoint->name.fullname)
{
    /*ошибка выделения памяти*/
        goto end;
}
gn = GENERAL_NAME_new();
if(!gn)
{
        /*ошибка выделения памяти*/
        goto end;
}
dp->distpoint->type = GEN_URI;

...

for(j = 0; j<max;j++)
{
    printf("%s\n",val);
            
    gn->type = GEN_URI; 
    if(!(gn->d.ia5 = M_ASN1_IA5STRING_new()))
    {
        printf("GeneralName IA5 malloc ERROR!\n");
        rc = -4;
        goto end;
    }
    if(!ASN1_STRING_set(gn->d.ia5, (unsigned char*)val,strlen(val)))
    {
        printf("STRING setting ERROR!\n");
        rc = -3;
        goto end;
    }
    sk_GENERAL_NAME_insert(dp->distpoint->name.fullname,gn,j);
}    

sk_DIST_POINT_insert(dps,dp,0);
printf("dpoints: %d\n",sk_DIST_POINT_num(dps)); /*контрольная печать! Показывает что DIST_POINT добавлен в структуру!!! */

if(!X509_add1_ext_i2d(x, NID_crl_distribution_points, dps, 0,X509V3_ADD_APPEND)) 
{
    printf("Ошибка добавления расширения CRL-dp!\n");
    rc = -15;
    goto end;
}
.....


Программа работает, функции завершаются нормально, но при разборе сертификата с помощью ASN1 парзера мне выдают пустой секвенс на месте CRLdp:


Код

585   11:         SEQUENCE {
 587    3:           OBJECT IDENTIFIER cRLDistributionPoints (2 5 29 31)
 592    4:           OCTET STRING, encapsulates {
 594    2:             SEQUENCE {
 596    0:               SEQUENCE {}
         :               }
         :             }
         :           }




Подскажите, где может быть ошибка? Сталкивался ли кто с чем-либо подобным?

ЗЫ: Остальные расширения пакуются нормально.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)