C# 如何检查X509Certificate2是否可导出
现在我们有了X509Certificate2实例。如何检查可导出私钥?(最好不尝试显式导出)查看,导出方法的实现进行以下检查:C# 如何检查X509Certificate2是否可导出,c#,.net,certificate,C#,.net,Certificate,现在我们有了X509Certificate2实例。如何检查可导出私钥?(最好不尝试显式导出)查看,导出方法的实现进行以下检查: X509ContentType参数为Cert、SerializedCert或Pfx 当内容类型为Pfx时,它会对导出和打开权限提出关键容器权限要求 除此之外,其他一切都是通过对CLR的内部调用来实现的,因此很难说对调用方有什么要求。我无法在测试可导出标志的源代码中观察到检查 在这种情况下,我建议您尝试执行导出,并将任何异常作为反馈处理;您无法用证书公开的信息合理地预
参数为X509ContentType
、Cert
或SerializedCert
Pfx
- 当内容类型为
时,它会对Pfx
和导出
权限提出关键容器权限要求打开
在这种情况下,我建议您尝试执行导出,并将任何异常作为反馈处理;您无法用证书公开的信息合理地预测调用的结果。我在这里找到的另一种方法: X509Certificate2.PrivateKey获取表示与证书关联的私钥的非对称Gorithm对象 RSACryptServiceProvider类是一种非对称算法 然后获取rsacryptserviceprovider.CspKeyContainerInfo,它是一个CspKeyContainerInfo对象,具有可导出属性:获取一个值,该值指示是否可以从密钥容器导出密钥
更新:工作。因此,如果您使用RSA证书,这是可以接受的方法。使用此方法:
var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
var certificates = store.Certificates.Find(
X509FindType.FindByThumbprint, thumbprint, false);
X509Certificate2 cert = certificates[0];
public static bool CheckCertificateIsExportable(X509Certificate2 certForCheck, X509ContentType certType)
{
try
{
certForCheck.Export(certType);
return true;
}
catch
{
return false;
}
}
如何使用:
var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
var certificates = store.Certificates.Find(
X509FindType.FindByThumbprint, thumbprint, false);
X509Certificate2 cert = certificates[0];
public static bool CheckCertificateIsExportable(X509Certificate2 certForCheck, X509ContentType certType)
{
try
{
certForCheck.Export(certType);
return true;
}
catch
{
return false;
}
}
使用什么机制和参数导出?代码只显示查找证书。这无关紧要。例如,使用bouncy castle:
var key=DotNetUtilities.GetKeyPair(GetCertificate(thumbprint).PrivateKey.Private代码>。如果证书不可导出,此代码将引发异常。或者在windows证书mmc管理单元中,您可以选择证书,右键单击它,所有任务,导出。在出现的窗口中,当证书不可导出时,可以禁用私钥无线电。我想以编程方式检测它:是否可导出。确定。现在我实现了您所说的:尝试导出并捕获异常。这是try..catch方法。我在我的应用程序中使用类似于您示例中的代码。是的,它起作用了。但这并不是我想要的。我很惊讶,没有这个自行车发明,就没有api可以直接检查它。