【发布时间】:2012-02-17 16:04:45
【问题描述】:
我想知道证书的私钥是否存储在硬件设备中。
让我们假设以下应用程序
class Program
{
static void Main(string[] args)
{
try
{
X509Store store = new X509Store("MY", StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
foreach (X509Certificate2 x509 in store.Certificates)
{
if (x509.HasPrivateKey)
{
AsymmetricAlgorithm a = x509.PrivateKey;
RSACryptoServiceProvider r = a as RSACryptoServiceProvider;
if (null != r)
{
System.Console.WriteLine("hardware: " + r.CspKeyContainerInfo.HardwareDevice);
System.Console.WriteLine("Subject: " + x509.Subject);
System.Console.WriteLine("container: " + r.CspKeyContainerInfo.KeyContainerName);
System.Console.WriteLine("---");
}
}
}
}
catch (CryptographicException ex)
{
Console.WriteLine("Information could not be written out for this certificate.");
}
}
}
我要查找的信息位于r.CspKeyContainerInfo.HardwareDevice。
但不幸的是,对于基本智能卡 csp 提供的商店,一旦执行 AsymmetricAlgorithm a = x509.PrivateKey(如果当时不存在智能卡),我就会提示插入设备。
有没有办法在不弹出这个烦人的“请插入智能卡”对话框的情况下获取相同的信息?
【问题讨论】: