在linux上获取带有dotnet核心的私钥

时间:2017-04-27 14:33:45

标签: linux certificate .net-core

我有一个程序可以在商店中找到证书,并测试是否存在rsa私钥。

var store = (StoreName.CertificateAuthority, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindByThumbprint, "a02274af4e74defc0bf2ffb45e2d90bdbb1282f9", false);

if (certs.Count > 0)
{
    Console.WriteLine("Cert found");
    X509Certificate2 cert = certs[0];
    var rsa = cert.GetRSAPrivateKey();
    if (rsa == null)
        Console.WriteLine("rsa failed");
    else
        Console.WriteLine("rsa ok");
}

在Windows上,将pfx中的证书安装到商店中,一切都很好。

在linux上,找到证书,但私钥不是。 我使用这个SO答案将我的pfx转换为crt文件:https://stackoverflow.com/a/16724275/1083225 然后我将crt文件放入/usr/local/share/ca-certificates,并执行update-ca-certificates 如果我查看crt文件,rsa就会出现。

这是一个.NETCoreApp 1.1

1 个答案:

答案 0 :(得分:2)

cert loader for LM\Root on Linux仅将文件加载为X.509 DER或X.509 PEM,因此不会加载私钥材料。

如果您希望自行颁发的证书是root信任的,则将其添加到您的发行版认为是OpenSSL的根信任的任何地方都是正确的。如果您还需要访问与该证书关联的私钥,您还需要将其置于CurrentUser存储中,或者手动将其作为PFX加载。