Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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# 如何使用BouncyCastle csharp验证SSL证书_C#_.net_Ssl Certificate_Bouncycastle - Fatal编程技术网

C# 如何使用BouncyCastle csharp验证SSL证书

C# 如何使用BouncyCastle csharp验证SSL证书,c#,.net,ssl-certificate,bouncycastle,C#,.net,Ssl Certificate,Bouncycastle,我必须为HttpRequests和websocket连接验证非浏览器应用程序中的几个SSL证书。我正在使用一个插件来处理那些http和websocket连接,而这些连接反过来又使用来验证证书。但是,“验证”部分必须由我通过实施ICertificateVerifier来完成,该验证应包含isValid方法中的验证检查 public interface ICertificateVerifyer { bool IsValid(Uri targetUri, X509CertificateStru

我必须为
HttpRequests
websocket
连接验证非浏览器应用程序中的几个SSL证书。我正在使用一个插件来处理那些http和websocket连接,而这些连接反过来又使用来验证证书。但是,“验证”部分必须由我通过实施
ICertificateVerifier
来完成,该验证应包含
isValid
方法中的验证检查

public interface ICertificateVerifyer
{
    bool IsValid(Uri targetUri, X509CertificateStructure[] certs);
}
理论上,我知道我必须做什么,但我的问题是实现以及如何利用bouncycastle库实现这一点。我对密码学没有深入的了解,但是经过一些阅读之后,我想我知道为了验证证书而要做的步骤,但是它不知道如何实现它

1。信任链验证

我的第一个简单方法是对
certs[0].Issuer.ToString()
certs[1].Subject.ToString()
进行字符串比较,这虽然有效,但不是一个好主意。因此,我发现这个实现(据我所知)检查父级的公共证书是否用于签署子级证书。这听起来更合理,但我无法将其移植到bouncycastle csharp,因为我无法从父项的公钥中提取
exp
整数

我也不明白为什么实现只处理certs数组中2个证书的情况。我的理解是,也可能会有更长的证书链,只有最下面的证书是服务器证书,最上面的证书应该是根CA

我缺少的另一件事是“检查”根CA必须是客户机信任的CA之一。我不知道如何做,也不知道如何加载CAs

2。主机名验证

乍一看很简单,因为我得到了
证书[0]。Subject{CN=“myDomainIwanttoverify}
,但是根据我的建议,你应该使用“SubjectAltNames”,而不是“Common Name”,我猜这是属性
CN
。我也不知道怎么做

3.证书撤销

这是我不知道如何做的一部分,也没有找到我理解并能够使用的任何实现。据我所知,除了CA(用于信任链验证)之外,我还必须提供证书吊销列表(CLR)。如果是这样的话,是否有必要尽可能频繁地更新此列表


我知道这是一个复杂的话题,但据我所知,大多数非浏览器应用程序都没有验证证书或“做错了”“我想,至少我会尽我最大的努力。

X509链接验证,包括吊销列表和主机名比较,已内置到该框架中。您使用BouncyCastle有什么特别的原因吗?如果有其他选择,请先参考这篇文章,看看它是否已经满足您的要求:不幸的是,我被迫使用BouncyCastle。为什么?我最好随时在BC上使用
X509Chain
类。此类完全实现RFC5280证书验证规则。您是对的,但这是一个不同的用例。我想我将为此创建一个新问题。我创建了一个关于同一问题的新问题,但现在使用
X509Chain
validation。框架中内置了X509链接验证,包括吊销列表和主机名比较。您使用BouncyCastle有什么特别的原因吗?如果有其他选择,请先参考这篇文章,看看它是否已经满足您的要求:不幸的是,我被迫使用BouncyCastle。为什么?我最好随时在BC上使用
X509Chain
类。此类完全实现RFC5280证书验证规则。您是对的,但这是一个不同的用例。我想我将为此创建一个新问题。我创建了一个关于同一问题的新问题,但现在使用
X509Chain
验证。