【问题标题】:Getting Subject Alternative Name OpenSSL获取主题备用名称 OpenSSL
【发布时间】:2019-09-13 18:50:55
【问题描述】:

我正在尝试从我的客户端证书中检索主题备用名称。通过运行这个命令,我可以看到 SAN:

openssl x509 -noout -text -in certname.cert.pem
...
X509v3 Subject Alternative Name: 
IP Address:10.10.10.10

在 C 文件中,我试图检索客户端 SAN,以便我可以使用服务器 IP 对其进行验证。这是我的尝试:

cert = X509_STORE_CTX_get_current_cert(x509Ctx);
int i;
int san_names_nb = -1;
STACK_OF(GENERAL_NAME) *san_names = NULL;

// Try to extract the names within the SAN extension from the certificate
san_names = (GENERAL_NAME*)X509_get_ext_d2i((X509 *) cert, NID_subject_alt_name, NULL, NULL);
if (san_names == NULL) 
{
   return Error;
}

现在,我的代码返回错误,因为 san_names 为 NULL。任何指导将不胜感激。谢谢!

【问题讨论】:

    标签: c openssl x509certificate tls1.2 subject-alternative-name


    【解决方案1】:

    OpenSSL 命令本身将 SAN 设为 Null

    X509v3 Subject Alternative Name: **<BLANK>**
    IP Address:10.10.10.10
    

    您能否打开证书并查看它是否包含 SAN。如果没有,您将不得不要求团队添加 SAN 并再次创建新证书。

    【讨论】:

    • 问题已经说明“通过运行此命令,我可以看到 SAN”。
    • IP 地址是可见的,而不是 SAM,所以认为它是空白的
    【解决方案2】:

    您在滥用X509_get_ext_d2i()。每the OpenSSL documentation for X509_get_ext_d2i()(我的粗体字):

    如果idxNULL,则只允许出现一次扩展,否则返回索引*idx 之后的第一个扩展并将*idx 更新为扩展的位置。

    根据您使用的 OpenSSL 版本,行为可能会略有不同。以上是 OpenSSL 1.1.0 的记录行为。

    由于您将NULL 传递为idx,因此如果证书上有多个SAN,您将从X509_get_ext_d2i() 获得NULL

    您可以使用ERR_get_error() 获取 OpenSSL 错误代码。

    【讨论】:

      猜你喜欢
      • 2017-12-03
      • 2011-09-05
      • 1970-01-01
      • 2012-07-16
      • 2021-06-24
      • 2017-10-11
      • 1970-01-01
      • 2023-01-18
      • 2022-12-19
      相关资源
      最近更新 更多