如何删除AppData Roaming Microsoft Crypto keys wern x50



每当执行此操作时:

new X509Certificate2(bytes)

...在C:Users[user]AppDataRoamingMicrosoftCryptoKeys

下创建一个新文件

完成证书后如何删除此文件?

我尝试了:

using(new X509Certificate2(bytes)) {...}

nope。

...
cert.Reset();
...

nope。

尝试将字节写入文件并从中读取。

nope。

其他建议?

如果您不设置X509KeyStorageFlags.PersistKeySet,则当您处置(或重置(证书时或以后收集垃圾时,该文件应删除。

如果您确实设置了X509Keystorageflags.persistkeyset,则.NET将不再自动删除它,并且必须手动进行。

try
{
    AsymmetricAlgorithm alg = cert.PrivateKey;
    if (alg is RSACryptoServiceProvider rsaCsp)
    {
        rsaCsp.PersistKeyInCsp = false;
        rsaCsp.Dispose();
    }
    else if (alg is DSACryptoServiceProvider dsaCsp)
    {
        dsaCsp.PersistKeyInCsp = false;
        dsaCsp.Dispose();
    }
    return;
}
catch (CryptographicException)
{
    // Maybe not a CAPI key
}
try
{
    CngKey cngKey = null;
    using (RSA rsa = cert.GetRSAPrivateKey())
    using (DSA dsa = cert.GetDSAPrivateKey())
    using (ECDsa ecdsa = cert.GetECDsaPrivateKey())
    {
        if (rsa is RSACng rsaCng)
        {
            cngKey = rsaCng.Key;
        }
        else if (dsa is DSACng dsaCng)
        {
            cngKey = dsaCng.Key;
        }
        else if (ecdsa is ECDsaCng ecdsaCng)
        {
            cngKey = ecdsaCng.Key;
        }
    }
    if (cngKey != null)
    {
        cngKey.Delete();
        cngKey = null;
    }
}
catch (CryptographicException)
{
}

如果您没有设置PersistKeySet,但是您的过程异常终止,则忘记了应该删除密钥的概念,并且新的PFX将创建一个新文件。知道要删除的内容很难,超出了这个答案的范围。

相关内容

  • 没有找到相关文章

最新更新