c# - 使用 RSACryptoServiceProvider 使用过期证书加密/解密数据没有错误

标签 c# encryption encryption-asymmetric x509certificate2

我目前正在进行使用证书加密数据的概念验证。它运行良好,但现在,我想尝试证书过期时的场景。我创建了一个过期的证书,我惊讶地发现即使证书过期了,一切仍然正常。我本来以为会出现错误。

你知道这是不是因为它是自签名证书?

这是我用来测试我的案例的代码

[TestMethod]
public void Encrypt_decrypt_with_expired_certificate()
{
    //Arrange
    var baseString = "This is an encryption test";
    X509Certificate2 newX509Certificate2 = new X509Certificate2("d:\\testx509certExpired.pfx", "apassword");
    Console.WriteLine(newX509Certificate2.NotAfter); //Show the expiration date which is in the past
    var encryptor = new CertificateEncryptor(newX509Certificate2); //This class is a simple wrapper around RSACryptoServiceProvider

    //Act
    string encryptedResult = encryptor.Encrypt(baseString); //Exception expected because of the expired certificate but not thrown

    //Assert
    Console.WriteLine("Base string : {0}", baseString);
    Console.WriteLine("Encrypted string : {0}", encryptedResult);
    Assert.IsNotNull(encryptedResult);

    //revert back
    string decryptedString = encryptor.Decrypt(encryptedResult);
    Console.WriteLine("Decrypted string : {0}", decryptedString);
    Assert.AreEqual(baseString, decryptedString);
}

谢谢

最佳答案

正如 GregS 所说,RSACryptoServiceProvider 类(不是 X509Certificate2)提供了执行加密操作的能力。 RSACryptoServiceProvider 对证书一无所知,它只知道 key 及其参数。这就是为什么您看不到任何错误。

这意味着证书验证是您的应用程序的责任。您应该在加密数据时检查证书,并跳过所有证书检查来解密数据。

关于c# - 使用 RSACryptoServiceProvider 使用过期证书加密/解密数据没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28098470/

相关文章:

encryption - RSA 的公钥和私钥可以互换吗?

algorithm - 短消息公钥加密算法

c# - 如何在不使用 AutoMapper 的情况下手动映射 DTO?

c# - 在 switch 语句的默认部分中使用负数作为 char

c# - 什么是 |和 ^ 运算符用于什么?

c# - DDD 与 EF : Collection of Value objects

javascript - AES CBC : JavaScript/CryptoJS Encrypt -> Golang Decrypt

php - 关闭 cURL 中的 CURLOPT_SSL_VERIFYPEER 是否会使传输不安全?

android - 如何在来自 HLS 流媒体的 exoplayer(android 应用程序)中播放加密视频?

c# - Bouncy CaSTLe PGP解密问题