C# 在C中执行SSL服务器验证#

C# 在C中执行SSL服务器验证#,c#,.net,ssl,verification,C#,.net,Ssl,Verification,我目前正在编写连接到服务器以检索配置文件的代码。这需要通过HTTPS以安全的方式进行。我发现当前的实现并没有真正满足这一要求: HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("https://www.configserver.com/..."); if (ReloadGlobals.IgnoreSSLErrors) // always true httpWebRequest.Authenticatio

我目前正在编写连接到服务器以检索配置文件的代码。这需要通过HTTPS以安全的方式进行。我发现当前的实现并没有真正满足这一要求:

HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("https://www.configserver.com/...");

if (ReloadGlobals.IgnoreSSLErrors) // always true
    httpWebRequest.AuthenticationLevel = AuthenticationLevel.None;

if (m_ReloadConfig.DontCheckSSLCert) // always true
    ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(OnCheckSSLCert);

httpWebesponse = (HttpWebResponse)httpWebRequest.GetResponse();
远程回调的实现方式如下:

private static bool OnCheckSSLCert(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Security.Cryptography.X509Certificates.X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    return true;
}
我真的不太了解HTTPS,但即使是我也能看出这没有多大意义,看起来像是一个解决办法。因此,我需要找到一种方法,以适当的方式实现这一点

我感谢你给我的每一个建议

编辑: 部分要求:

一旦确定了配置服务器的地址和URL,对等方必须与该IP地址建立HTTPS连接。如果提供了配置服务器的可选URL,则证书必须与[RFC2818]中所述URL中的域名匹配;否则,证书必须与[RFC2818]中描述的覆盖名称匹配。如果HTTPS证书通过名称匹配,则节点必须获取配置文件的新副本


如果您的应用程序只需要与单个服务器通信,则可以对证书指纹进行硬编码。不幸的是,事实并非如此。将来可能会有很多不同的配置服务器。我希望默认处理程序(当您根本不订阅
ServicePointManager.ServerCertificateValidationCallback
时)是合理的。可能使用internet explorer使用的相同逻辑。您可以尝试默认设置,然后使用SSLsniff进行攻击。