【问题标题】:Ignoring invalid SSL certificate忽略无效的 SSL 证书
【发布时间】:2011-11-14 11:55:09
【问题描述】:

我正在尝试从我们的子版本中打印出日志消息。但我正在努力绕过无效的 SSL 证书。这是错误:

选项 'https://xxxxx/svn/SiteFabrics/trunk/AppLaunch/Bloc/Frontend':服务器 证书验证失败:为不同的证书颁发 主机名,发行者不受信任 (https://xxxx)

我忽略证书错误的尝试是添加以下行:

ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;

但这并没有任何区别,因为 .net 错误仍然相同。下面是代码,谁能看到我做错了什么?

        using (SvnClient client = new SvnClient())
        {
            Collection<SvnLogEventArgs> list;
            client.Authentication.DefaultCredentials = new NetworkCredential("user", "pass");

            ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;

            SvnLogArgs la = new SvnLogArgs(); //{ Start=128; End=132; };
            client.LoadConfiguration(Path.Combine(Path.GetTempPath(), "Svn"), true);
            client.GetLog(new Uri("https://[svnurl]"), la, out list);
            ViewBag.SVNLog = list;
        }

【问题讨论】:

  • 你看过这篇文章了吗?:stackoverflow.com/questions/3099392/…
  • 在最近的 SharpSvn 版本中,您可以使用 .UseDefaultConfiguration() 而不是 .LoadConfiguration 来避免使用临时目录。

标签: c# .net asp.net-mvc-3 svn ssl


【解决方案1】:

找到解决此问题的方法:

首先添加这个:

        static void SVN_SSL_Override(object sender, SharpSvn.Security.SvnSslServerTrustEventArgs e)
    {
        e.AcceptedFailures = e.Failures;
        e.Save = true;
    }

然后替换我原来的魔法线:

            ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;

用这个:

client.Authentication.SslServerTrustHandlers += new EventHandler<SharpSvn.Security.SvnSslServerTrustEventArgs>(SVN_SSL_Override);

【讨论】:

    【解决方案2】:

    您可以使用像 tortoisesvn 这样的 SVN UI 连接到存储库,并接受错误的 SSL 证书,然后它就可以正常工作了。不是代码修复,但可能适用于您的实例。我的也是这样。

    【讨论】:

    • 对,将证书颁发者添加到您的受信任证书颁发机构列表中,这比接受任何证书更安全。
    • 这正是 .SslServerTrustHandlers 实现通过设置 .Save = true 所做的。但是单独保存可能不起作用,因为调用 .LoadConfiguration() 时未使用默认配置位置。
    【解决方案3】:

    也可以使用 lambda 表达式(在 VB 中):

    AddHandler client.Authentication.SslServerTrustHandlers, Sub(ssender As Object, ev As SharpSvn.Security.SvnSslServerTrustEventArgs)
      ev.AcceptedFailures = ev.Failures
      ev.Save = True
    End Sub
    

    【讨论】:

      【解决方案4】:
      private void GetClaimParams(string targetUrl, out string loginUrl, out Uri navigationEndUrl)
              {
      HttpWebRequest webRequest = null;
                  WebResponse response = null;
                  webRequest = (HttpWebRequest)WebRequest.Create(targetUrl);
                  webRequest.Method = Constants.WR_METHOD_OPTIONS;
                  #if DEBUG
                      ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(IgnoreCertificateErrorHandler);
                  #endif
                  try
                  {
                      response = (WebResponse)webRequest.GetResponse();
                      ExtraHeadersFromResponse(response, out loginUrl, out navigationEndUrl);
                  }
                  catch (WebException webEx)
                  {
                      ExtraHeadersFromResponse(webEx.Response, out loginUrl, out navigationEndUrl);
                  }
      }
      
      
      
      #if DEBUG
              private bool IgnoreCertificateErrorHandler
                 (object sender,
                 System.Security.Cryptography.X509Certificates.X509Certificate certificate,
                 System.Security.Cryptography.X509Certificates.X509Chain chain,
                 System.Net.Security.SslPolicyErrors sslPolicyErrors)
              {
                  return true;
              }
      #endif // DEBUG
      

      【讨论】:

        【解决方案5】:

        我正在使用这个...试一试:

        //As given in the url to handle invalid SSL : http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.servercertificatevalidationcallback.aspx
        
                        ServicePointManager.ServerCertificateValidationCallback += new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertificatePolicy.CheckValidationResult);
        

        【讨论】:

          【解决方案6】:

          与上面的答案几乎相同,只是将回调作为委托传递。你可以试一试,可能对你有用 -

          ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-05-28
            • 2019-01-16
            • 2023-03-31
            • 2015-03-19
            • 2010-09-06
            • 1970-01-01
            • 2016-01-28
            • 2012-06-08
            相关资源
            最近更新 更多