首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取主题备用名称OpenSSL

获取主题备用名称OpenSSL
EN

Stack Overflow用户
提问于 2019-09-14 02:50:56
回答 2查看 631关注 0票数 0

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

代码语言:javascript
运行
复制
openssl x509 -noout -text -in certname.cert.pem
...
X509v3 Subject Alternative Name: 
IP Address:10.10.10.10

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

代码语言:javascript
运行
复制
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为空。任何指导都将不胜感激。谢谢!

EN

回答 2

Stack Overflow用户

发布于 2019-09-26 11:18:00

OpenSSL命令本身将SAN设置为空

代码语言:javascript
运行
复制
X509v3 Subject Alternative Name: **<BLANK>**
IP Address:10.10.10.10

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

票数 0
EN

Stack Overflow用户

发布于 2019-09-26 17:40:00

您滥用了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错误代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57928935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档