Создайте запрос компьютера, включая 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