使用不受信任的 SSL 证书进行 c# 发布

本文关键字:证书 发布 SSL 信任 | 更新日期: 2023-09-27 18:36:04

我们在 IIS6 中创建了一个证书,并使用 SSL 将其应用于站点。现在,我们以前使用的相同程序将无法正常工作。据我了解,c# 透明地支持 HTTPS,所以我相信它必须使用"不受信任"的证书。关闭代理设置后(收到 403 禁止错误),我收到"无法为 SSL 建立信任关系"

我已经尝试了一些解决方法,例如将默认证书策略与验证黑客交换,但它很旧,我仍然收到相同的错误。

以下是我的发布方法。

 try
    {
        HttpRequestCachePolicy policy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
        HttpWebRequest.DefaultCachePolicy = policy;

        byte[] buffer = Encoding.UTF8.GetBytes(postData);
        //Initialisation
        HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(url);
        WebReq.Timeout = 10000;
        //method is post
        if (useproxy == "ON")
        {
            WebProxy myProxy = new WebProxy();
            // Create a new Uri object.
            Uri newUri = new Uri(proxy);
            // Associate the new Uri object to the myProxy object.
            myProxy.Address = newUri;
            WebReq.Proxy = myProxy;
        }

        WebReq.KeepAlive = false;
        WebReq.Method = "POST";
        WebReq.ContentType = "application/x-www-form-urlencoded";

        //The length of the buffer 
        WebReq.ContentLength = buffer.Length;
        Stream PostData = WebReq.GetRequestStream();
        //write, and close. 
        PostData.Write(buffer, 0, buffer.Length);
        PostData.Close();
        //Get the response handle
        HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
        Console.WriteLine(WebResp.StatusCode);
        Console.WriteLine(WebResp.Server);
        //Do not worry about response!. 
        //read the response (the string), and output it.
        Stream Answer = WebResp.GetResponseStream();
        StreamReader _Answer = new StreamReader(Answer);
        vystup = _Answer.ReadToEnd();

        if (vystup != "OK")
        {
        }
    }
    catch (WebException ex)
    {
        Console.WriteLine(ex);
    }

证书或我的应用程序或 IIS 中是否有任何解决方法可以解决此问题?大概是它的 C# 不信任证书,但这是我第一次使用 Https。

欢迎提供任何信息。

使用不受信任的 SSL 证书进行 c# 发布

默认情况下,.NET 证书策略将拒绝任何未经验证或不受信任的服务器证书,因为 99% 的时间都是你想要的。(默认情况下,唯一通过的"错误"证书已过期,但其他有效证书已过期。

有几个选项,具体取决于您正在谈论的部署规模。

  1. 在客户端上安装服务器的证书作为受信任的根证书。对于测试,这是最简单的选择,我一直使用开发机器的 IIS 和 IIS Express 证书执行此操作。不过生产的想法很糟糕

  2. 使用内部 CA 生成证书;如果您为具有 Active Directory 设置的公司工作,则 AD 服务器可以充当 CA,并且您可以使用组策略将 AD 服务器的 CA 根目录自动推送到客户端。如果你在内部部署一些东西,这是一个很好的方法,因为它非常便宜:)

  3. 在忽略任何 SSL 错误的 ServicePointManager 类上实现 ServerCertificateValidationCallback。这里唯一真正的陷阱是这是一个全局设置,因此每次使用 WebRequest都将使用您的自定义验证回调。

我认为这不起作用,因为您没有请求通过SSL进行WebRequest。

根据Microsoft的说法,您需要添加类似WebReq.EnableSsl = true;