2014-07-13 18 views
5

Próbuję utworzyć żądanie z adresem SAN adresu IP. Jest to funkcja, która jest odpowiedzialna za stworzenie CAlternativeName:Utwórz żądanie komputera W tym adres IP Temat Alternatywna nazwa

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; 
    } 
} 

Problem polega na tym, że ja dostaję kolejny błąd:

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

Co robię źle?

Odpowiedz

3

InitializeFromString nie akceptuje parametru AlternativeNameType XCN_CERT_ALT_NAME_IP_ADDRESS **. Zamiast tego należy użyć wartości InitializeFromRawData. Błąd jest czymś w rodzaju niewłaściwej, ponieważ nie jest to w rzeczywistości parametr wartościowy, ale jest to typ, ale hej.

InitializeFromRawData pobiera ciąg jako wejście (bo to jest Microsoft, nie Ronseal), więc trzeba kodować surowe dane jako ciąg, dzięki czemu można go obrócić go do surowych danych ponownie:

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

O tak intuicyjny jak arcydzieło Eschera.

** Źródło: http://msdn.microsoft.com/en-us/library/windows/desktop/aa375024%28v=vs.85%29.aspx