Добрый день. Решаю задачу по созданию сертификата 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 {} : } : } : }
|
Подскажите, где может быть ошибка? Сталкивался ли кто с чем-либо подобным?
ЗЫ: Остальные расширения пакуются нормально.
|