2015-01-22 2 views
1

В настоящее время я делаю доказательство концепции для шифрования данных с использованием сертификата. Он работает хорошо, но теперь я хочу попробовать сценарий, когда срок действия сертификата истек. Я создал сертификат с истекшим сроком действия, и я был удивлен, заметив, что когда-либо работает свойство даже с истекшим сертификатом. Я ожидал ошибки.Отсутствие шифрования/дешифрования данных с сертификатом с истекшим сроком действия с использованием RSACryptoServiceProvider

Знаете ли вы, не так ли, потому что это самоподписанный сертификат?

Вот код, который я использую для тестирования моего случая

[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); 
} 

Благодаря

+0

Вероятно, лучше всего подходит для обзора кода, на мой взгляд. – MethodMan

+2

Если вы хотите использовать сертификат с истекшим сроком действия, класс X509Certificate2 не остановит вас. Он предоставляет вам методы для проверки истечения срока действия, чтобы вы могли написать код, чтобы обнаружить состояние и отреагировать соответствующим образом. –

ответ

3

Как сказал Gregs, RSACryptoServiceProvider класса (не X509Certificate2) обеспечивает возможность выполнения криптографических операций. RSACryptoServiceProvider ничего не знает о сертификате, он знает только ключи и их параметры. Вот почему вы не видите никаких ошибок.

Это означает, что проверка сертификата - это ответственность вашего приложения. Вы должны проверять сертификат при шифровании данных и пропускать все проверки сертификатов для дешифрования данных.

+0

Чтобы добавить к этому, «ключи» в сертификате фактически не «истекают». «Expriy» в сертификате является объектом ASN1 в сертификате, который является независимым от ключей. – zaitsman

Смежные вопросы