C 获取主题替代名称OpenSSL
我正在尝试从我的客户端证书中检索主题替代名称。通过运行此命令,我可以看到SAN:C 获取主题替代名称OpenSSL,c,openssl,x509certificate,tls1.2,subject-alternative-name,C,Openssl,X509certificate,Tls1.2,Subject Alternative Name,我正在尝试从我的客户端证书中检索主题替代名称。通过运行此命令,我可以看到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
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。任何指导都将不胜感激。谢谢大家! OpenSSL命令本身将SAN设置为Null
X509v3 Subject Alternative Name: **<BLANK>**
IP Address:10.10.10.10
X509v3主题备选名称:****
IP地址:10.10.10.10
你能打开证书看看它是否包含SAN吗。如果没有,您必须要求团队添加SAN并再次创建新证书
您误用了
X509\u get\u ext\u d2i()
。Per(加粗矿):
如果idx
为NULL
,则只允许出现一次扩展否则返回索引*idx
后的第一次扩展,并将*idx
更新到扩展的位置
根据您使用的OpenSSL版本,行为可能略有不同。以上是OpenSSL 1.1.0的记录行为
由于您将NULL
作为idx
传递,如果证书上有多个SAN,您将从X509\u get\u ext\u d2i()
获得NULL
您可以使用获取OpenSSL错误代码。问题已经说明“通过运行此命令,我可以看到SAN”。IP地址是可见的,而不是SAM,因此认为它是空的