Openssl:将可分辨名称从字符串转换为 DER 编码

问题描述 投票:0回答:1

我有 X.509 证书的颁发者作为字符串表示形式:

"C=UT/O=foobar/OU=foo/serialNumber=0123/CN=TEST ca"

如何使用 C 中的 openssl 将可分辨名称元素从字符串表示形式获取为 DER 编码形式(及其各自的 OID)。

c openssl x509
1个回答
0
投票

i2d_X509_NAME
是将 openSSL
X509_NAME*
对象转换为 DER 格式的函数。

我不知道是否有函数可以将整个“C=UT/O=foobar/OU=foo/serialNumber=0123/CN=TEST ca”字符串直接转换为

X509_NAME*

但也许很简单(为了简单起见,缺少错误检查)示例有帮助:

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <openssl/pem.h>

int main()
{   
    unsigned char *buffer = NULL;
    X509_NAME *name = X509_NAME_new();

    X509_NAME_add_entry_by_txt(name, "O",  MBSTRING_UTF8, 
                               (unsigned char*)"Organization", -1, -1, 0);
    X509_NAME_add_entry_by_txt(name, "CN",  MBSTRING_UTF8, 
                               (unsigned char*)"MyName", -1, -1, 0 );
    
    int len = i2d_X509_NAME(name, &buffer);     
    fwrite(buffer, len, 1, stdout);
    OPENSSL_free(buffer);
    X509_NAME_free(name);
        
    return EXIT_SUCCESS;
}

测试:

$ gcc x509_name.c -Wall -o x509_name -lcrypto
$ ./x509_name | hexdump -C
00000000  30 28 31 15 30 13 06 03  55 04 0a 0c 0c 4f 72 67  |0(1.0...U....Org|
00000010  61 6e 69 7a 61 74 69 6f  6e 31 0f 30 0d 06 03 55  |anization1.0...U|
00000020  04 03 0c 06 4d 79 4e 61  6d 65                    |....MyName|
0000002a
$
© www.soinside.com 2019 - 2024. All rights reserved.