2

我有一个 SubjectAltName 设置为的证书(使用 openssl 应用程序): 证书主体ALtName

我想读取已构建以下代码的字段 RegisteredID(例如):

GENERAL_NAME* getX508SubjectAltNameInfo(X509* pCertificate)
{
    int i;
    int san_nb =-1;
    STACK_OF(GENERAL_NAME) * san_names=NULL;
    GENERAL_NAME *current_name;
    san_names =(STACK_OF(GENERAL_NAME) *)X509_get_ext_d2i(pCertificate, NID_subject_alt_name, NULL, NULL);
    if (san_names == NULL)
        return NULL;
    san_nb = sk_GENERAL_NAME_num(san_names);
    if (san_nb <= 0)
        return NULL;
    for (i=0;i<san_nb;i++){
        current_name = sk_GENERAL_NAME_value(san_names, i);
        if (current_name->type == GEN_RID/*8*/) {
            return current_name;
        {
    }
    sk_GENERAL_NAME_pop_free(san_names, GENERAL_NAME_free);
    return current_name;
}

后来我用它

ASN1_OBJECT* rid;
char* ridStr;
GENERAL_NAME* san = getX508SubjectAltNameInfo(pCertificate);
if (san == NULL)//<-- always true 
{
    print_log_err("no indx key found");
}

rid = san->d.registeredID;
ridStr = (char*)rid->data;
printf("%s",ridStr);

但是当我调试它时,我只能在里面看到current_name

 (gdb) p *current_name.d->rid
$5 = {sn = 0x1600000010 <Address 0x1600000010 out of bounds>, ln = 0x1bee1f0 "my@other.address", nid = 0, length = 0,
  data = 0x21 <Address 0x21 out of bounds>, flags = 8}
(gdb) p *current_name.d->registeredID
$6 = {sn = 0x1600000010 <Address 0x1600000010 out of bounds>, ln = 0x1bee1f0 "my@other.address", nid = 0, length = 0,
  data = 0x21 <Address 0x21 out of bounds>, flags = 8}

我的问题是我做错了什么?我的代码是否正常,但证书创建出错或相反(或两者兼而有之)

4

0 回答 0