Убедитесь, что сертификат действителен для шифрования / дешифрования

Как упоминалось в таких вопросах, как этот, этот и этот, если вы попытаетесь зашифровать / расшифровать, используя сертификат, действительный только для цифровых подписей, вы получите CryptographicException: "Плохой ключ" от RSACryptoServiceProvider.

У меня вопрос, как проверить заранее (например, когда вы настраиваете сертификаты в своем приложении), является ли сертификат действительным для этой цели. Я обнаружил, что подобного подхода с использованием только расширений v3 недостаточно, поскольку RSACryptoServiceProvider прекрасно работает для дешифрования с использованием сертификата с расширением v3 только для цифровых сигнатур.

Поэтому я предполагаю, что мне нужно будет проверить конкретный список OID, используя код, подобный тому, что я нашел здесь:

private static bool IsCertificateOkForDecryption(X509Certificate2 certificate)
{
    string[] validOids = 
    {
        //TODO: what goes here??
    };

    return (
            certificate.Extensions.Where(e=> validOids.Contains(e.Oid.Value)
            .Any()
        );
}

(код не является точным - только для иллюстрации)

Есть ли более простой способ?

Если нет, где я могу найти список допустимых OID?

Для получения дополнительной информации см. Также проблему SAML Kentor.AuthServices, которая вызвала этот вопрос.

0 ответов

Другие вопросы по тегам