我正在尝试为 MasterCard Match 实施身份验证,作为他们以下文档的一部分,他们有一个示例私钥:
https://developer.mastercard.com/portal/display/api/OAuth+Validation
在该页面上,他们有两个版本的密钥,一个是 base64 编码文本,在页面上可见,另一个是可下载的 .p12 文件。
如何导入此密钥以用作 x509certificate2?
无论我尝试什么,我都会收到消息“找不到请求的对象。”。
我尝试使用 .net 源代码对其进行深入研究,但在导入的对象上遇到了死胡同
[SecurityCritical]
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern uint _QueryCertFileType(string fileName);
我已经尝试了以下方法,但所有这些都失败了,并出现了相同的上述消息
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")
所以我将文本块复制到“copied.txt”中,并尝试使用该文件,我也尝试读取字节,并手动传递它们,我也尝试使用
X509Certificate.CreateFromCertFile(fileName)
两个文件。
有任何想法吗?证书不好吗?我使用了错误的课程吗?该错误消息是什么意思?
--Update-- 在 Bad Zombie 的建议下,我尝试了 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(),
});
}
在“ImportParameters”调用中,我得到“错误数据”。难道我做错了什么?