Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 证书具有不受支持的关键扩展名_C#_X509certificate_Bouncycastle - Fatal编程技术网

C# 证书具有不受支持的关键扩展名

C# 证书具有不受支持的关键扩展名,c#,x509certificate,bouncycastle,C#,X509certificate,Bouncycastle,我试图使用c#中的Bouncy Castle库验证证书链,代码如下,但出现异常:“证书具有不受支持的关键扩展名”。此方法中发生异常:validator.Validate(path,param) 我的证书有一个关键扩展: 名称:“扩展密钥使用”,oid:2.5.29.37,值:ocsp冲压(1.3.6.1.5.5.7.3.9) 公共静态bool ValidateKeyChain(X509证书客户端,列出可信证书){ bool-found=false; int c=受信任证书计数; PkixCert

我试图使用c#中的Bouncy Castle库验证证书链,代码如下,但出现异常:“证书具有不受支持的关键扩展名”。此方法中发生异常:validator.Validate(path,param)

我的证书有一个关键扩展: 名称:“扩展密钥使用”,oid:2.5.29.37,值:ocsp冲压(1.3.6.1.5.5.7.3.9)

公共静态bool ValidateKeyChain(X509证书客户端,列出可信证书){
bool-found=false;
int c=受信任证书计数;
PkixCertPathBuilder cf=新的PkixCertPathBuilder();
信任锚;
HashSet锚=新的HashSet();
PkixCertPath路径;
PkixParameters参数;
PkixCertPathValidator validator=新的PkixCertPathValidator();
而(!发现(&c>0)
{
锚点=新的信任锚点(trustedCerts[--c],空);
锚。添加(锚);
集合集=新集合();
set.Add(客户端);
路径=新的PkixCertPath(设置);
param=新的PKIx参数(锚);
param.IsRevocationEnabled=false;
if(client.IssuerDN.Equals(trustedCerts[c].SubjectDN))
{
validator.Validate(路径,参数);
如果(IsSelfSigned(trustedCerts[c]))
{
//发现根癌
发现=真;
}
如果(!client.Equals(trustedCerts[c]),则为else
{
//查找父ca
found=ValidateKeyChain(trustedCerts[c],trustedCerts);
}
}
}
返回已找到;}

最后,我找到了问题的解决方案,我检查了Bouncy Castle的java和c源代码,发现dotnet源代码中的“PkiCertPathValidator”类存在差异;在调用Rfc3280CertPathUtilities.WrapupCertf(…)方法之前的validate方法中,已删除关键扩展,但在Dotnet版本中缺少以下行:

criticalExtensions.Remove(X509Extensions.ExtendedKeyUsage.Id);
我在源代码中添加了这一行,然后构建了它,它工作正常


注:互联网上最相关的答案是:[

谷歌搜索
证书有一个不受支持的关键扩展bouncy castle
显示了许多建议。您能列出您已经尝试过的建议吗?扩展密钥用法扩展不应标记为关键。亲爱的@mjwills我尝试了在internet上找到的每一段代码,但其中只有一段是有用的我在我的回答中贴了它的链接。仍然不见了,谢谢
criticalExtensions.Remove(X509Extensions.ExtendedKeyUsage.Id);