10

OpenSSL API を使用して、X.509v3 証明書からカスタム拡張機能を抽出しました。

X509_EXTENSION* ex = X509_get_ext(x509, 4);

X509_EXTENSION オブジェクトには、ASN.1 OCTET STRING である値 (ex->value) が含まれています。OCTET STRING には、DER でエンコードされた UTF-8 文字列が含まれています。OCTET STRING をデコードしてプレーンな UTF-8 文字列を取得しようとしています。

次のようないくつかのことを試しました。

ASN1_STRING_to_UTF8(&buf, ex->value);

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

これらは両方とも、DER でエンコードされた文字列を提供します。プレーンな UTF-8 文字列を取得するにはどうすればよいですか?

4

1 に答える 1

7

@Francois は ASN1_get_object() 関数を教えてくれました。この関数は、証明書の拡張機能に単一の値のみが含まれるシナリオに適しています。

ASN1_get_object() は、DER でエンコードされたオブジェクトを含む C バッファーへのポインターへのポインターを取ります。データ自体 (ポインターを調整することにより)、データの長さ、ASN.1 タグ値、および ASN.1 オブジェクト クラスを返します。

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);
于 2011-09-08T04:51:14.780 に答える