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?