在Mac OS X上访问钥匙串的私钥

时间:2020-10-07 08:23:34

标签: 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 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证书,但其privateKey为空。

0 个答案:

没有答案