1
我想解析一個x509v3證書。我已經拼湊在一起如何獲得我需要的所有部分,除了主題替代名稱中的URI字段。我有以下代碼。當我在用於創建我的測試證書的配置文件中更改我的主題alt名稱字段時,我看到了計數,SA和類型輸出的相應更改,因此它似乎正在讀取SA URI的正確區域。然而,我的SA輸出總是以「1」出現,所以它看起來不是正確的結構成員,因爲我在我的URI字段中有一個名稱。C++:從x509v3證書檢索主題ALT名稱
從證書文本輸出(通過openssl命令):
X509v3 Subject Alternative Name:
URI:ThisIsTheUri, email:[email protected]
的代碼:
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;
}
}