在Linux上使用.NET Core X509Store

23
在使用.NET Core 2的Linux系统中,证书文件位于何处?X509Store
在Windows系统中,可以通过管理控制台certlm.msc或使用Powershell中的New-SelfSignedCertificate来访问证书。使用.NET API,在Windows和Linux上都可以通过以下方式添加证书:
using (var store = new X509Store(StoreName.My, StoreLocation.CurrentUser))
{
    store.Open(OpenFlags.ReadWrite);
    var cert = new X509Certificate2("cert.pfx", "1234");
    store.Add(cert);
}

可以通过X509Store.Certificates.Find()访问。

但是这些文件存储在哪里,如何通过Linux工具添加它们呢?例如,系统管理员将添加证书,应用程序只会读取它们。

3个回答

28

@mbican的回答是正确的,证书位于

~/.dotnet/corefx/cryptography/x509stores/

我不相信这种没有上下文的一行回答,也不理解他是怎么到那里的。这就是为什么我想把我的研究结果分享出来作为一个答案,给所有未来遇到同样问题的访问者。

  1. 使用pfx证书文件,你不需要将它转换为pem或crt或其他任何格式

  2. 将证书存储在dotnet中,以便您可以查看文件的存放位置。一个小的C#命令行:

    using (var store = new X509Store(StoreName.My, StoreLocation.CurrentUser, OpenFlags.ReadWrite))
    {
        store.Add(new X509Certificate2(
            "./thePathToTheCert.pfx", "passwordOfTheCert", 
            X509KeyStorageFlags.PersistKeySet));
    }
    

    这创建了文件夹 ~/.dotnet/corefx/cryptography/x509stores/ 并将证书放置其中。

    ~/.dotnet/corefx/cryptography/x509stores/my/ThumbPrintOfTheCertificate.pfx

    提示:在Windows上,我们曾使用 StoreLocation.LocalMachine,但当我们在Linux上运行时,没有LocalMachine存储位置,因此我们改为使用StoreLocation.CurrentUser。如果您尝试使用LocalMachine,则会收到以下错误消息:Unix LocalMachine X509Stores are read-only for all users.

希望这能对某人有所帮助。


谢谢你的提示。我相信它会在未来节省我的时间。我们也使用了本地机器存储。 - Sarrus
你是如何在Linux命令行中运行C#代码的? - Shane

9

~/.dotnet/corefx/cryptography/x509stores/


1
重要的是要知道证书是未加密的,这意味着如果您将该目录复制到另一台服务器上,它就可以正常工作,但也存在泄露私钥的风险。 - mbican
在Linux上从LocalMachine存储中读取是否可行?或者在Linux上检索证书的唯一可能方式是使用StoreLocation.CurrentUser? - Igor
3
我记得目前仅在Linux上可以使用CurrentUser,但是我没有验证过。LocalMachine无法使用。 - mbican
@mbican 这真令人担忧。系统管理员是否无法为Linux机器上的所有用户安装证书并限制其复制?我之前只在Windows上使用过证书,用户只有在拥有适当权限的情况下才能导出本地机器证书。 - undefined

0

我在将一个应用程序更新为使用ASP.NET Core 2.1时遇到了类似的问题。与数据库的SSL连接不再接受连接字符串中的PFX文件(CentOS,在Windows上工作),因此我不得不将PEM证书文件添加到/etc/pki/tls/certs,并将PEM密钥文件添加到/etc/pki/tls/private

这样就停止了X509Store.Open()抛出异常的情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接