2014-07-13 1 views
5

J'essaye de créer une demande avec l'adresse IP SAN. Ceci est la fonction qui est responsable de la création du CAlternativeName:Créer une demande d'ordinateur Y compris l'adresse IP Objet Autre nom

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

Le problème est que je reçois l'erreur suivante:

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

Qu'est-ce que je fais mal?

Répondre

3

InitializeFromString n'accepte pas un type de remplacement de XCN_CERT_ALT_NAME_IP_ADDRESS **. Vous devez utiliser InitializeFromRawData à la place. L'erreur est quelque peu impropre car ce n'est pas vraiment le paramètre value qui pose problème, c'est le type, mais bon.

InitializeFromRawData prend une chaîne en entrée (parce que c'est Microsoft, pas Ronseal), vous avez donc besoin d'encoder vos données brutes en tant que chaîne de sorte qu'il peut se transformer en données brutes à nouveau:

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

A propos aussi intuitif qu'une œuvre d'art Escher.

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