ssl - 将主题名称转换为 x509_name 格式

标签 ssl openssl x509certificate x509

我在 CN=CA1, O=DEVANG 中有 CA 证书的主题名称。 我想转换成 X509_NAME 格式。

是否有任何 API 可以帮助我转换它? 我如何比较?

最佳答案

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() 可用。

我希望有人有更好的答案......

关于ssl - 将主题名称转换为 x509_name 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38584154/

相关文章:

linux - 使用 curl 获取请求。没有错误,但 Content-Length 等于 0

asp.net - 通过 HTTPS 的 HttpWebRequest,NTLM 不工作

swift - NSTask 在命令中添加额外的单引号

c - openssl 头文件中的 FIPS_rsa_x931_derive_ex 函数

powershell - 在其他用户的当前用户存储上安装证书

php - jquery POST 不在 https 中返回任何结果

java - 通过执行 HttpsURLConnection.setDefaultSSLSocketFactory 拒绝访问 setFactory

ssl - 如何在树莓派上验证 openssl 证书?

ssl - 您可以同时在同一个商店中拥有多个有效的 SSL 证书吗?

c# - RestSharp 如何在 Https 请求中添加客户端证书? (C#)