Macos 在Mac OS X上访问密钥链的私钥

Macos 在Mac OS X上访问密钥链的私钥,macos,x509certificate,keychain,Macos,X509certificate,Keychain,我正在C#上为Windows/Mac OS X实现一个应用程序,它用证书对文件进行数字签名。为此,我使用了BouncyCastle和iText库。在windows上,无需任何特殊代码即可完美运行。我可以使用此代码读取机器上存储的证书 X509Store store = new X509Store(StoreLocation.CurrentUser); store.Open(OpenFlags.ReadOnly); foreach (X509Certificate2 certificate in

我正在C#上为Windows/Mac OS X实现一个应用程序,它用证书对文件进行数字签名。为此,我使用了BouncyCastle和iText库。在windows上,无需任何特殊代码即可完美运行。我可以使用此代码读取机器上存储的证书

X509Store store = new X509Store(StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
foreach (X509Certificate2 certificate in store.Certificates)
{
    if (certificate.HasPrivateKey && certificate.NotAfter >= DateTime.Now)
    {
        // USE CERTIFICATE
    }
}
我面临的问题是访问存储在密钥链中的证书。因为我可以获取证书的信息,但不能获取它们的私钥。我认为应该有一种方法来访问该信息(在用户确认允许访问后),但我不知道如何访问。 我当前获取证书信息的实现是:

var query = new SecRecord(SecKind.Certificate)
{
    MatchValidOnDate = DatetimeToNSDate(DateTime.Now),
    CanSign = true,
};

var certList = Security.SecKeyChain.QueryAsRecord(query, 100, out var result);
foreach(var cert in certLis)
{
    SecCertificate tempCertificate = new SecCertificate(cert);
    X509Certificate2 certificateObj = tempCertificate.ToX509Certificate2();
}

certificateObj
是有效的X509证书,但其私钥为空。

X.509证书不包含私钥,仅包含公钥。如果要同时存储证书、私钥和公钥,则应使用PKCS#12标准存储和检索证书。我尝试了一种解决方法,将证书和私钥从密钥链导出到P12文件中,但从命令行似乎无法仅导出证书及其私钥,你只能导出所有的钥匙链,没有人想要。钥匙链在导出方面有点细致。您应该能够将证书导出到.cer文件中,并将密钥导出到.p12文件中。然后使用openssl在需要的地方进行转换,这是我的建议。但是从代码中运行所有这些,您应该能够通过查询密钥链(只要该密钥是由应用程序创建的)以及证书来检索私钥。但它必须是两个独立的查询Hi Bram,我尝试在P12文件上导出这两个文件,X509证书工作得很好,甚至它正确地对文件进行了签名。我想从命令行工具中执行此过程,以最小化用户交互。你能帮我吗?很遗憾,我没有使用命令行访问钥匙链的经验。我相信你可以打一些安全电话。你可能想看看