如this,this和this之类的问题所述,如果您尝试使用仅对数字签名有效的证书进行加密/解密,那么您就是&#39 ; ll得到一个CryptographicException:" Bad Key"来自RSACryptoServiceProvider。
我的问题是如何预先验证(例如,当您在应用程序中配置证书时),证书是否有效用于此目的。我发现只使用v3扩展名的this这样的方法不就足够了,因为RSACryptoServiceProvider可以使用仅具有DigitalSignatures的v3扩展名的证书进行解密。
所以我假设我需要使用类似于我here的代码检查特定的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列表?
有关背景信息,另请参阅引发此问题的Kentor.AuthServices SAML issue。