我正在尝试解析 x509v3 证书。我拼凑了如何获取我需要的所有部分,除了主题替代名称中的 URI 字段。我有以下代码。当我在用于创建测试证书的配置文件中更改主题 alt 名称字段时,我看到计数、SA 和类型输出的相应更改,因此它似乎正在读取 SA URI 的正确区域。但是,我的 SA 输出始终显示为“1”,因此它似乎不是正确的结构成员,因为我的 URI 字段中有一个名称。
从证书文本输出(通过 openssl 命令):
X509v3 Subject Alternative Name:
URI:ThisIsTheUri, email:foo@bar.com
编码:
GENERAL_NAMES* subjectAltNames =
(GENERAL_NAMES*)X509_get_ext_d2i(&certificate, NID_subject_alt_name, NULL, NULL);
boost::int32_t altNameCount = sk_GENERAL_NAME_num(subjectAltNames);
std::cout << "Alt Name Count: " << altNameCount << "." << std::endl;
for (boost::int32_t i = 0; i < altNameCount; ++i)
{
GENERAL_NAME* generalName = sk_GENERAL_NAME_value(subjectAltNames, i);
if (generalName->type == GEN_URI)
{
subjectAltName = std::string(reinterpret_cast<char*>(generalName->d.ia5->data));
// subjectAltName should be "ThisIsTheUri", but is "1".
std::cout << "SA: '" << subjectAltName << "'." << std::endl;
}
else
{
std::cout << "Type: '" << generalName->type << "'." << std::endl;
}
}