创建包含IP地址主题备用名称的计算机请求

sha*_*har 7 c# self-signed certenroll

我正在尝试使用IP地址SAN创建请求.这是负责创建CAlternativeName的函数:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

我究竟做错了什么?

Rus*_*hyo 5

InitializeFromString不接受XCN_CERT_ALT_NAME_IP_ADDRESS **的AlternativeNameType。您必须改为使用InitializeFromRawData。该错误有点用词不当,因为实际上不是值参数是问题,而是类型,但是嘿。

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

String ipBase64 = Convert.ToBase64String(ip.GetAddressBytes());
nameClass.InitializeFromRawData(AlternativeNameType.XCN_CERT_ALT_NAME_IP_ADDRESS, EncodingType.XCN_CRYPT_STRING_BASE64, ipBase64);
Run Code Online (Sandbox Code Playgroud)

就像埃舍尔的艺术品一样直观。

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