Создайте запрос компьютера, включая IP-адрес.

Я пытаюсь создать запрос с 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;
    }
}

Проблема в том, что я получаю следующую ошибку:

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

Что я делаю неправильно?

1 ответ

Решение

InitializeFromString не принимает параметр AlternativeNameType типа XCN_CERT_ALT_NAME_IP_ADDRESS**. Вы должны использовать 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);

Примерно такой же интуитивный, как произведение искусства Эшера.

** Источник: http://msdn.microsoft.com/en-us/library/windows/desktop/aa375024%28v=vs.85%29.aspx

Другие вопросы по тегам