如何使用ASPNET用户帐户访问私钥?

问题描述:

我在使用ASPNET用户导入和访问私钥时遇到了一些麻烦。 我知道,当一个人手动导入私钥(.pfx文件)时,在Windows中,您可以选择将该钥匙标记为可导出。 现在,据我所知,这是必要的,以便稍后检索该私钥。如何使用ASPNET用户帐户访问私钥?

我的问题是,我在代码中导入私钥,作为ASPNET用户,并且似乎没有办法将其标记为可导出的方式,就像Windows证书导入向导一样。 为了澄清,导入工作正常,但是当我访问现在导入的证书上的详细信息时,没有私钥数据。

这是我用来导入证书的代码,一旦我已经用正确的密码打开.pfx文件。

public void ImportCertificate(X509Certificate2 cert, StoreName name, StoreLocation loc) 
{ 
    X509Store certStore = new X509Store(name, loc); 
    StorePermission permission = new StorePermission(PermissionState.Unrestricted); 
    permission.Flags = StorePermissionFlags.AddToStore; 
    permission.Assert(); 
    certStore.Open(OpenFlags.ReadWrite); 
    certStore.Add(cert); 
    certStore.Close(); 
} 

我是否搞错了权限或导入这个私钥的方式? 或者我完全用错误的方式去做这件事?

我相信你需要在导入证书时设置X509KeyStorageFlags.Exportable标志。你不显示的代码,但导入方法与此签名的重载:

public override void Import(string fileName, string password, 
          X509KeyStorageFlags keyStorageFlags); 

或者这一个:

public override void Import(byte[] rawData, string password, 
          X509KeyStorageFlags keyStorageFlags); 

可以让你把它导入之前。否则,一切看起来不错!

Richard