创建包含IP地址的计算机请求,主题可选名称

本文关键字:请求 IP 包含 地址 计算机 创建 | 更新日期: 2023-09-27 18:12:45

我正在尝试创建一个IP地址SAN的请求。这个函数负责创建alternativename:

public static CAlternativeNameClass GetCurrentIpName() {
    //get current machine IP address
    IPAddress ip = GetCurrentIp();
    if (ip == null) {
        return null;
    }
    try {
       CAlternativeNameClass nameClass = new CAlternativeNameClass();
       nameClass.InitializeFromString(AlternativeNameType.XCN_CERT_ALT_NAME_IP_ADDRESS, ip.ToString());
       return nameClass;   
    } catch (Exception e) {
        Console.WriteLine(e);
        return null;
    }
}

问题是我得到了下一个错误:

System.ArgumentException: Value does not fall within the expected range.
              at CERTENROLLLib.CAlternativeNameClass.InitializeFromString(AlternativeNameType Type, String strValue)

我做错了什么?

创建包含IP地址的计算机请求,主题可选名称

InitializeFromString不接受XCN_CERT_ALT_NAME_IP_ADDRESS**的AlternativeNameType。您必须使用InitializeFromRawData。这个错误是用词不当,因为实际上问题不在于value参数,而在于类型,但是,嘿。

InitializeFromRawData接受字符串作为输入(因为这是Microsoft,而不是Ronseal),所以您需要将原始数据编码为字符串,以便它可以再次将其转换为原始数据:

String ipBase64 = Convert.ToBase64String(ip.GetAddressBytes());
nameClass.InitializeFromRawData(AlternativeNameType.XCN_CERT_ALT_NAME_IP_ADDRESS, EncodingType.XCN_CRYPT_STRING_BASE64, ipBase64);

和埃舍尔的作品一样直观。

来源:http://msdn.microsoft.com/en-us/library/windows/desktop/aa375024%28v=vs.85%29.aspx