Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.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# 如何使用CA证书C验证证书链#_C#_Cryptography_Certificate_Public Key Encryption - Fatal编程技术网

C# 如何使用CA证书C验证证书链#

C# 如何使用CA证书C验证证书链#,c#,cryptography,certificate,public-key-encryption,C#,Cryptography,Certificate,Public Key Encryption,我正在尝试连接到Mosquitto经纪人。 代理将有一个ca.crt和一个server.crt。我的应用程序将仅具有ca.crt 连接后,代理提供ca.crt和server.crt(证书链)。 如何根据我已经拥有的ca.crt验证这两个属性? ca.crt与客户端上的相同。使用该类并将加载为的ca.crt放在属性的外部存储属性上 var caCert=new X509Certificate2(“.\\ca.crt”); var serverCert=new X509Certificate2(“.

我正在尝试连接到Mosquitto经纪人。 代理将有一个ca.crt和一个server.crt。我的应用程序将仅具有ca.crt

连接后,代理提供ca.crt和server.crt(证书链)。 如何根据我已经拥有的ca.crt验证这两个属性? ca.crt与客户端上的相同。

使用该类并将加载为的
ca.crt
放在属性的
外部存储
属性上

var caCert=new X509Certificate2(“.\\ca.crt”);
var serverCert=new X509Certificate2(“.\\server.crt”);
X509Chain ch=新的X509Chain();
ch.ChainPolicy.RevocationMode=X509RevocationMode.Online;
ch.ChainPolicy.ExtraStore=新的X509Certificate2Collection(caCert);
总建造(服务器证书);

不幸的是,它对我不起作用。构建返回false。但是,如果我更改了顺序(即,将servercert添加到外部存储并调用ch.Build(caCert)),结果将为true。我还从服务器获取X509Chain(位于服务器上的CA证书和服务器证书)。当我调用X509Chain.Build(我自己的站点的CA证书)时,我也得到了正确的答案。上述任何一种验证方法是否可接受?我知道一般的想法,但我不明白为什么您的代码返回false。您可以从X509Chain获得很多信息,这些信息将告诉您它返回false的原因。阅读一些内容后,我更改了以下参数:1。X509RevocationMode.NoCheck;因为我无法在线检查证书或使用CRL。证书将存储为文件或安装在windows证书存储中。2.X509VerificationFlags.AllowUnknownCertificationAuthority;因为我的证书是自签名的,所以它现在可以工作了——没有在线撤销检查——就像我假设的那样。很高兴听到