我有一个程序可以在商店中找到证书,并测试是否存在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
答案 0 :(得分:2)
cert loader for LM\Root on Linux仅将文件加载为X.509 DER或X.509 PEM,因此不会加载私钥材料。
如果您希望自行颁发的证书是root信任的,则将其添加到您的发行版认为是OpenSSL的根信任的任何地方都是正确的。如果您还需要访问与该证书关联的私钥,您还需要将其置于CurrentUser存储中,或者手动将其作为PFX加载。