C# .pem X509Certificate2的私钥

C# .pem X509Certificate2的私钥,c#,x509certificate,x509certificate2,C#,X509certificate,X509certificate2,我有一个.pem作为私钥: -----BEGIN RSA PRIVATE KEY----- KEY -----END RSA PRIVATE KEY----- 当我尝试转换为X509Certificate2时,出现以下错误: 找不到请求的对象 我所尝试的: static byte[] PEM(string type, byte[] data) { string pem = Encoding.ASCII.GetString(data); string header = Strin

我有一个.pem作为私钥:

-----BEGIN RSA PRIVATE KEY-----
KEY
-----END RSA PRIVATE KEY-----
当我尝试转换为X509Certificate2时,出现以下错误:

找不到请求的对象

我所尝试的:

static byte[] PEM(string type, byte[] data)
{
    string pem = Encoding.ASCII.GetString(data);
    string header = String.Format("-----BEGIN {0}-----", type);
    string footer = String.Format("-----END {0}-----", type);
    int start = pem.IndexOf(header) + header.Length;
    int end = pem.IndexOf(footer, start);
    string base64 = pem.Substring(start, (end - start));
    return Convert.FromBase64String(base64);
}

static X509Certificate2 LoadCertificateFile(string filename)
{
    X509Certificate2 x509 = null;
    using (FileStream fs = System.IO.File.OpenRead(filename))
    {
        byte[] data = new byte[fs.Length];
        fs.Read(data, 0, data.Length);
        if (data[0] != 0x30)
        {
            data = PEM("RSA PRIVATE KEY", data);
        }
        if (data != null)
            x509 = new X509Certificate2(data); //Here i get the error
    }
    return x509;
}

client_pk = LoadCertificateFile(@"..\private.pem");

我可以从.PFX文件导入完整的证书。我认为您可以使用OpenSSL将.PEM转换为.PFX。下面是为我加载.PFX文件而编写的代码:

SecureString secStr = new SecureString();
"<your_password>".ToCharArray().ToList().ForEach(c => secStr.AppendChar(c));
var cert = new X509Certificate2();
cert.Import("<your path to .PFX file>", secStr, X509KeyStorageFlags.Exportable);
SecureString secStr=new SecureString();
“”.tocharray().ToList().ForEach(c=>secStr.AppendChar(c));
var cert=新的X509Certificate2();
cert.Import(“”,secStr,X509keystrageFlags.Exportable);

我可以从.PFX文件导入完整的证书。我认为您可以使用OpenSSL将.PEM转换为.PFX。下面是为我加载.PFX文件而编写的代码:

SecureString secStr = new SecureString();
"<your_password>".ToCharArray().ToList().ForEach(c => secStr.AppendChar(c));
var cert = new X509Certificate2();
cert.Import("<your path to .PFX file>", secStr, X509KeyStorageFlags.Exportable);
SecureString secStr=new SecureString();
“”.tocharray().ToList().ForEach(c=>secStr.AppendChar(c));
var cert=新的X509Certificate2();
cert.Import(“”,secStr,X509keystrageFlags.Exportable);

您的文件仅为私钥。它不是证书,这就是代码失败的原因。您的文件只是私钥。它不是证书,这就是代码失败的原因。