在Windows或.NET中支持未知的关键X509证书扩展
我试图用在Windows或.NET中支持未知的关键X509证书扩展,.net,windows,x509,x509certificate2,x509chain,.net,Windows,X509,X509certificate2,X509chain,我试图用X509Chain验证.NET(4.5.2)中的证书链,我的链将不会验证,因为叶证书有一个关键扩展(Apple Pay),可能Windows提供的.NET framework的底层安全引擎无法识别该扩展 目前,我可以通过确保证书链的唯一错误是由此扩展引起的错误来解决此问题: 叶的chaineelementstatus中的一个项目,具有x509chainestatusflags的Status。InvalidExtension 叶的ChainElementStatus中的一项,其状态为(x
X509Chain
验证.NET(4.5.2)中的证书链,我的链将不会验证,因为叶证书有一个关键扩展(Apple Pay),可能Windows提供的.NET framework的底层安全引擎无法识别该扩展
目前,我可以通过确保证书链的唯一错误是由此扩展引起的错误来解决此问题:
- 叶的
中的一个项目,具有chaineelementstatus
x509chainestatusflags的
。InvalidExtensionStatus
- 叶的
中的一项,其ChainElementStatus
状态为
(有趣的是,IDE给它命名为(x509chainestatusflags)0x08000000
,但该值在枚举中不存在;我假设这是由于.NET framework的更改)HasNotSupportedCriticalExtension
- 该叶确实有一个带有预期OID的
扩展Critical
X509Chain
类实现这一点的方法
我也找不到一种方法将这个扩展“安装”到Windows中,使它能够识别它
有办法做到这一点吗?或者剥离扩展或者让框架认识到这是一个比让它失败并确切验证其原因更糟糕的“坏主意”?我认为用CryptoAPI以优雅的方式实现这一点是不可能的(
X509Chain
只是CryptoAPI上的简单包装器)。您可能需要研究BouncyCastle中可用的选项。@Crypt32是的,我自己也有这种倾向。我在BC方面有点运气(不改变源代码!),但我不想承担依赖性,而且我仍然不确定是否有一种处理扩展的“正确”方式。“正确”方式是用RFC编写的,用CryptoAPI实现的——拒绝具有未知关键扩展的cert。我知道这对你没有多大帮助,但这就是我能为你提供的一切。即使是底层CryptoAPI函数也不会公开请求的功能,因此.NET BCL不是您需要的工具,而且我在BC方面没有经验。