Игнорирование недопустимого сертификата SSL
Я пытаюсь распечатать сообщения журнала из нашей версии sub. Но я борюсь с обходом недействительного 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;
}
6 ответов
НАЙДЕНО РЕШЕНИЕ ЭТОЙ ПРОБЛЕМЫ:
сначала добавить это:
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);
вы можете подключиться к репозиторию с помощью SVN UI, например в TortoiseSVN один раз и принять плохой сертификат SSL, а затем он будет работать нормально. Не исправление кода, но может работать в вашем экземпляре. В моем-да.
также можно использовать лямбда-выражение (здесь, в VB):
AddHandler client.Authentication.SslServerTrustHandlers, Sub(ssender As Object, ev As SharpSvn.Security.SvnSslServerTrustEventArgs)
ev.AcceptedFailures = ev.Failures
ev.Save = True
End Sub
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
Я использую этот один... просто попробуйте :
//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);
почти то же самое, что и приведенные выше ответы, просто передавая обратный вызов как делегат. Вы можете дать ему попробовать, может работать на вас -
ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };