【问题标题】:get private key with dotnet core on linux在 linux 上使用 dotnet core 获取私钥
【发布时间】:2017-04-27 14:33:45
【问题描述】:

我有一个程序可以在商店中找到证书,并测试 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

【问题讨论】:

    标签: linux certificate .net-core


    【解决方案1】:

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

    如果您希望自己颁发的证书成为受根信任的证书,请将其添加到您的发行版认为是 OpenSSL 根信任的正确位置。如果您还需要访问与该证书关联的私钥,则需要将它也放在 CurrentUser 存储中,或者让您手动将其加载为 PFX。

    【讨论】:

    • 这甚至不适用于直接加载 pfx。或使用 CurrentUser。看起来 PrivateKey 在 linux 上将始终保持空白,它确实在 X509Certificate2 对象上显示“HasPrivateKey”:true,但随后“PrivateKey.Key”保持空白/空。至少对于带有 RSA 算法密钥的证书。
    • @SubodhWasankar X509Certificate2.PrivateKey 和 X509Certificate2.PublicKey.Key 属性已弃用。您应该改用 X509Certificate2.GetRSAPrivateKey()/GetRSAPublicKey()/Get{Alg}{Public|Private}Key()。
    • 有文档吗?实际上,我正在尝试从此证书创建 X509SigningCredentials,它正在创建无效的 X509SigningCredentials,因为 X509Certificate2 与私钥的预期不同。在 Linux 容器中。在 Windows 上工作。
    • @SubodhWasankar docs.microsoft.com/en-us/dotnet/api/… 顶部的大红框 :)。
    猜你喜欢
    • 2020-06-06
    • 2020-05-09
    • 2018-11-24
    • 2018-03-07
    • 1970-01-01
    • 2019-03-15
    • 2014-12-26
    • 2022-08-22
    • 2019-06-20
    相关资源
    最近更新 更多