C# 证书固定

标签 c# validation ssl certificate webclient

如何最好地验证 WebClient 中的证书?

目前我有这个:

class SafeClient : WebClient
{
    protected override WebRequest GetWebRequest(Uri address)
    {
        var request = base.GetWebRequest(address);

        byte[] embeddedCert;
        using (Stream certStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Test.Resources.test.pfx"))
        {
            embeddedCert = new byte[certStream.Length];
            certStream.Read(embeddedCert, 0, (int)certStream.Length);
        }

        var cert = new X509Certificate2(embeddedCert, "Pass");

        (request as HttpWebRequest).ClientCertificates.Add(cert);

        return request;
    }
}

但是我如何检查服务器响应中的证书。我不希望任何人都可以读/写响应/请求白查尔斯或...

预先感谢您以及来自德国的良好问候。

最佳答案

如果我理解你的目的正确的话,你想在发出请求后获取有关服务器证书的信息。

为此 HttpWebRequest 提供一个特殊的委托(delegate)。 HttpWebRequest.ServerCertificateValidationCallback

因此,您的代码可能如下所示:

var request = (HttpWebRequest)WebRequest.Create("https://");
request.ServerCertificateValidationCallback += (sender, cert, chain, error) =>
{
    //TODO:implement your custom logic
};

我希望此链接对您也有用。 ServicePointManager.ServerCertificateValidationCallback Property

关于C# 证书固定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50400383/

相关文章:

c# - ASP.NET MVC 中的 ViewModel 验证最佳实践

jquery - ASP.NET MVC 2 使用 jQuery 加载部分 View - 无客户端验证

regex - 与 mod_rewrite 斗争

c# - 什么是上下文?

c# - TPL执行相关任务并在某些任务失败时停止所有任务

c# - ASP.NET MVC 单点登录和角色

c# - 命令队列

java - Wicket 口和后端验证

postgresql - setSslMode() 不适用于 PGConnectionPoolDataSource

Apache Mina FTP 服务器 SFTP 配置和连接 SFTP 连接使用 FileZiza 或 WInscp 或任何 ftp 客户端接管安全通道