2014-07-13 72 views
5

我正在嘗試使用IP地址SAN創建請求。這是一種負責創建CAlternativeName功能:創建包含IP地址的計算機請求主題備用名稱

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) 

我究竟哪裏做錯了?

回答

3

InitializeFromString不接受AlternativeNameType的XCN_CERT_ALT_NAME_IP_ADDRESS **。您必須改用InitializeFromRawData。這個錯誤是不恰當的,因爲它實際上並不是價值參數,它是類型,但是嘿。

InitializeFromRawData接受一個字符串輸入(因爲這是微軟,而不是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

相關問題