Pergunta

Usando a API OpenSSL, eu ter extraído uma extensão personalizada de um certificado X.509v3 com:

X509_EXTENSION* ex = X509_get_ext(x509, 4);

O objecto X509_EXTENSION contém um (valor ex>) valor que é uma cadeia ASN.1 octeto. O octeto STRING contém um DER codificado cadeia UTF-8. Eu estou tentando decodificar o octeto STRING para obter a seqüência simples UTF-8.

Eu tentei algumas coisas, tais como:

ASN1_STRING_to_UTF8(&buf, ex->value);

e

M_ASN1_OCTET_STRING_print(bio, ex->value);
int len = BIO_read(bio, buf, buf_size);
buf[len] = '\0';

Estes dois me dar a corda DER codificado. Como faço para obter a seqüência simples UTF-8?

Foi útil?

Solução

@Francois me apontou para a função ASN1_get_object (). Essa função é apropriada para este cenário onde a extensão de certificado contém apenas um único valor.

ASN1_get_object () leva um ponteiro para um apontador para um tampão C que contém um objecto codificado por DER. Ele retorna os dados em si (por ajustamento do ponteiro), o comprimento dos dados, o valor da etiqueta ASN.1 e a classe ASN.1 objecto.

ASN1_OCTET_STRING* octet_str = X509_EXTENSION_get_data(extension);
const unsigned char* octet_str_data = octet_str->data;
long xlen;
int tag, xclass;
int ret = ASN1_get_object(&octet_str_data, &xlen, &tag, &xclass, octet_str->length);
printf("value: %s\n", octet_str_data);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top