Jak używać klucza prywatnego w C #? „Nie można znaleźć żądanego obiektu”.

Próbuję zaimplementować uwierzytelnianie dla karty MasterCard Match, jako część ich następującej dokumentacji mają przykładowy klucz prywatny:

https://developer.mastercard.com/portal/display/api/OAuth+Validation

Na tej stronie mają dwie wersje klucza: jedną w tekście zakodowanym w Base64, widoczną na stronie oraz plik do pobrania w formacie .p12.

Jak zaimportować ten klucz, aby użyć go jako certyfikatu x509?

Cokolwiek spróbuję, otrzymuję komunikat „Nie mogę znaleźć żądanego obiektu”.

Próbowałem zagłębić się w to źródło .net, ale w importowanym obiekcie dostałem ślepy zaułek

[SecurityCritical]
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern uint _QueryCertFileType(string fileName);

Wypróbowałem poniższe, a wszystkie z nich zawiodły z tą samą wyżej wymienioną wiadomością

new X509Certificate2(@"c:\test\mc-openapi-csr.pem")
new X509Certificate2(@"c:\test\mc-openapi-csr.pem", "mcapi")
new X509Certificate2(@"c:\test\mc-openapi-csr.pem", "mckp")

więc skopiowałem blok tekstu do „copied.txt” i spróbowałem użyć tego pliku, próbowałem też czytać bajty i przekazywać je ręcznie, próbowałem też użyć

X509Certificate.CreateFromCertFile(fileName)

z obydwoma plikami.

Jakieś pomysły? Czy certyfikat jest zły? Czy używam niewłaściwej klasy? Co oznacza ten komunikat o błędzie?

- Aktualizacja - Na sugestię Bad Zombie próbowałem BouncyCastle:

    var pem = new Org.BouncyCastle.OpenSsl.PemReader(File.OpenText(fileName));
    RsaPrivateCrtKeyParameters rsaParameters = (RsaPrivateCrtKeyParameters)pem.ReadObject();
    using (var rsa = new RSACryptoServiceProvider())
    {
        rsa.ImportParameters(new RSAParameters
            {
                DP = rsaParameters.DP.ToByteArray(),
                DQ = rsaParameters.DQ.ToByteArray(),
                Exponent = rsaParameters.Exponent.ToByteArray(),
                InverseQ = rsaParameters.QInv.ToByteArray(),
                Modulus = rsaParameters.Modulus.ToByteArray(),
                P = rsaParameters.P.ToByteArray(),
                Q = rsaParameters.Q.ToByteArray(),
            });
    }

w wywołaniu „ImportParameters” otrzymuję „Złe dane”. czy robię coś źle?

questionAnswers(2)

yourAnswerToTheQuestion