在 linux 上使用 dotnet core 获取私钥

get private key with dotnet core on linux

我有一个程序可以在商店中找到证书,并测试 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 文件: 我将crt文件放入/usr/local/share/ca-certificates,然后执行update-ca-certificates 如果我查看 crt 文件,就会发现 rsa。

这是一个 .NETCoreApp 1.1

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

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