Como faço para usar uma chave privada em c #? “Não é possível encontrar o objeto solicitado.”
Estou tentando implementar autenticação para o MasterCard Match, como parte de sua documentação a seguir, eles têm uma chave privada de exemplo:
https://developer.mastercard.com/portal/display/api/OAuth+Validation
Nessa página, eles têm duas versões da chave, uma em texto codificado em base64, visível na página e um arquivo .p12 para download.
Como eu importo esta chave para usar como um x509certificate2?
O que quer que eu tente, recebo a mensagem "Não é possível encontrar o objeto solicitado".
Eu tentei cavar com a fonte .net, mas eu tenho um beco sem saída em um objeto importado
[SecurityCritical]
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern uint _QueryCertFileType(string fileName);
Eu tentei o seguinte, e todos eles falham com a mesma mensagem acima mencionada
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")
então eu copiei o bloco de texto para "copied.txt", e tentei usar esse arquivo, eu também tentei ler os bytes e passá-los manualmente, eu também tentei usar
X509Certificate.CreateFromCertFile(fileName)
com os dois arquivos.
Alguma ideia? O certificado é ruim? Eu estou usando a aula errada? O que essa mensagem de erro significa?
--Update-- Na sugestão do Bad Zombie, eu tentei o 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(),
});
}
na chamada "ImportParameters", recebo "Bad Data". Estou fazendo algo errado?