質問

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

X509_EXTENSION* ex = X509_get_ext(x509, 4);

X509_Extensionオブジェクトには、ASN.1 Octet文字列である値(EX->値)が含まれています。 Octet文字列には、derエンコードされたUTF-8文字列が含まれています。 Octet文字列をデコードして、プレーン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文字列を取得するにはどうすればよいですか?

役に立ちましたか?

解決

@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);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top