【发布时间】:2016-11-29 18:19:53
【问题描述】:
我在 CN=CA1, O=DEVANG 中有 CA 证书的主题名称。
我想转成X509_NAME格式。
是否有任何 API 可以帮助我转换它? 如何比较?
【问题讨论】:
-
下面的答案是否解决了您的问题?
标签: ssl openssl x509certificate x509
我在 CN=CA1, O=DEVANG 中有 CA 证书的主题名称。
我想转成X509_NAME格式。
是否有任何 API 可以帮助我转换它? 如何比较?
【问题讨论】:
标签: ssl openssl x509certificate x509
OpenSSL 中似乎没有任何辅助函数可以执行此操作。看起来实现您想要的唯一方法是解析字符串并逐个构建X509_NAME_ENTRY 元素。您可以为此使用strsep,从而生成类似以下代码(它不进行任何错误检查,并且在名称格式的变化方面容易出错):
#define TEST_NAME "CN=CA1, O=DEVANG"
X509_NAME *x509name = X509_NAME_new();
char *x509nameString = strdup(TEST_NAME);
char *toFree = x509nameString;
char *x509nameEntryString = strsep(&x509nameString, ",");
char *x509nameEntryTypeString;
char *x509nameEntryValueString;
while (NULL != x509nameEntryString) {
x509nameEntryValueString = x509nameEntryString;
x509nameEntryTypeString = strsep(&x509nameEntryValueString, "=");
X509_NAME_add_entry_by_txt(x509name, x509nameEntryTypeString,
MBSTRING_ASC, x509nameEntryValueString, -1, -1, 0);
/* Need to skip spaces */
while ((NULL != x509nameString) &&
(' ' == *x509nameString)) {
x509nameString = &x509nameString[1];
}
x509nameEntryString = strsep(&x509nameString, ",");
}
/* See the result, just FYI */
X509_NAME_print_ex_fp(stdout, x509name, 0, XN_FLAG_ONELINE);
free(toFree);
为了比较两个X509_NAME 实例,可以使用函数X509_NAME_cmp()。
我希望有人有更好的答案...
【讨论】: