HTML语言: Codee#23000
Расширения пользователя x.509 были определены следующим образом:
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
D8:F0:12:EA:0D:67:55:96:C9:8E:A4:36:9E:62:84:7F:6F:41:0C:DB
X509v3 Authority Key Identifier:
keyid:C4:33:98:59:50:6B:CC:48:5A:4A:D7:5B:C0:A7:7C:37:DE:15:24:33
SEwVersion:
..0.2
SEww:
..0X5699
скажите, пожалуйста, как извлечь значения расширений и распечатать их на экране в режиме строки ascii, а именно, мы можем идентифицировать их как обычно:
* формат печати *
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
D8:F0:12:EA:0D:67:55:96:C9:8E:A4:36:9E:62:84:7F:6F:41:0C:DB
X509v3 Authority Key Identifier:
keyid:C4:33:98:59:50:6B:CC:48:5A:4A:D7:5B:C0:A7:7C:37:DE:15:24:33
SEVersion:
0.2 // no prefix like ".."
SE:
0X5699 // no prefix like ".."
и еще одна проблема:
SEwVersion:
..0.2
SEww:
0...version..0X5699
тогда как я могу получить и напечатать на экран, как это:
SEwVersion:
0.2 //no prefix ".."
SEww:
version 0X5699// no "..."and ".."
и мои коды следующие:
int Ext_count = X509_get_ext_count(cert);
for (int k=0; k <Ext_count; k++ ){
X509_EXTENSION* ex = X509_get_ext(cert, k);
if( ex == NULL )
continue;
OBJ_obj2txt((char *)buf, 100, ex->object, 0);
printf("name = %s\n", buf);
if (k>=Ext_count-2)
//I distinguish basic extensions and my added extensions like this , so it is not good methode, please tell me how to ...
{
ASN1_OCTET_STRING* octet_str = X509_EXTENSION_get_data(ex);
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);
}
else
{
BIO *bio = BIO_new(BIO_s_mem());
if(!X509V3_EXT_print(bio, ex, 0, 0)) // read the text of this extention
M_ASN1_OCTET_STRING_print(bio,ex->value);
len = BIO_read(bio, buf, 200);// here buffer contain the text, len the lenght of it.
buf[len] = '\0'; // add the EOT sign, buffer contain a readable text.
BIO_free(bio);
printf("value = %s\n", buf);
}
Большое спасибо за вашу любезную помощь заранее.