7

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)

私は何を間違っていますか?

4

1 に答える 1

6

InitializeFromString は、XCN_CERT_ALT_NAME_IP_ADDRESS** の AlternativeNameType を受け入れません。代わりにInitializeFromRawDataを使用する必要があります。このエラーは、実際には値パラメーターが問題ではなく、型であるため、誤称のようなものです。

InitializeFromRawData は入力として文字列を受け取るため (これは Ronseal ではなく Microsoft であるため)、生データを文字列としてエンコードして、生データに再び変換できるようにする必要があります。

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

于 2014-09-03T09:31:07.380 に答える