如何在C#中使用私钥&引用;找不到请求的对象。”;
我正在尝试为MasterCard Match实施身份验证,作为其以下文档的一部分,他们有一个示例私钥: 在该页面上,他们有两个版本的密钥,一个是base64编码的文本,在页面上可见,另一个是可下载的.p12文件 如何导入此密钥以用作x509certificate2 无论我尝试什么,我都会收到消息“找不到请求的对象” 我试着用.net源代码对其进行深入研究,但在导入对象时遇到了死胡同如何在C#中使用私钥&引用;找不到请求的对象。”;,c#,encryption,x509certificate2,C#,Encryption,X509certificate2,我正在尝试为MasterCard Match实施身份验证,作为其以下文档的一部分,他们有一个示例私钥: 在该页面上,他们有两个版本的密钥,一个是base64编码的文本,在页面上可见,另一个是可下载的.p12文件 如何导入此密钥以用作x509certificate2 无论我尝试什么,我都会收到消息“找不到请求的对象” 我试着用.net源代码对其进行深入研究,但在导入对象时遇到了死胡同 [SecurityCritical] [MethodImpl(MethodImplOptions.Interna
[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)
两个文件都有
有什么想法吗?证书坏了吗?我用错班级了吗?那个错误消息是什么意思
--更新--
在坏僵尸的建议下,我尝试了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”通话中,我得到了“坏数据”。我做错什么了吗?你可以尝试使用相对路径而不是绝对路径
只需将文件放在项目的根目录中,并尝试只使用文件名,而不使用路径 我记不清了,但我相信pem文件不能使用。你需要像这样的东西 我不太记得了,但它加载了PEM文件。偶尔它会不喜欢它,但它有点稀有。我不知道它是否可以使用,但我知道我成功地使用了私钥/公钥。我不知道如何将它转换为与.NETSSL库一起工作的东西 但是,如果您使用的是.NET实现,而不是bouncy castle,我建议您将其转换为pem,使其与.NET实现更兼容。我使用了bouncycastle,它为我的项目工作,不需要与另一个库接口
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.OpenSsl;
using System.IO;
using System.Security.Cryptography;
//elsewhere
using (var reader = File.OpenText(fileName))
{
var pemReader = new PemReader(reader);
var bouncyRsaParameters = (RsaPrivateCrtKeyParameters)pemReader.ReadObject();
var rsaParameters = DotNetUtilities.ToRSAParameters(bouncyRsaParameters);
this.PrivateKey = new RSACryptoServiceProvider();
this.PrivateKey.ImportParameters(rsaParameters);
}
如果无法使用pen文件,是否意味着不支持证书类型?或者只是文件格式,我可以手动更改?bouncy castle与x509certificate兼容吗?@McKay:我不知道。我知道pem是x509的base64编码,顶部和底部各有一行。但是你在谈论.net课程。我不认为是这样,但如果你只需要验证一些东西,而不需要使用MS.NET的东西,那么你也许可以使用它。我不熟悉万事达卡API。另外,如果他们的api有一个C#kit/lib,那不是有一些例子吗?我只知道我可以按照你在标题中的要求做,在C#with pem文件中使用一个私钥,使用bouncy castle。也许你应该试试p12文件。也许微软支持it@McKay:使用p12可能会更幸运,它可能兼容,或者您可以使用openssl更改格式。我知道我曾尝试在pem中使用.NET内置的东西,但它没有。FlySmasterCard没有.NET API。我无法将base64解码字节作为x509证书加载,也无法导入p12文件。我应该如何处理openssl中的p12文件以将其导入x509certificate?