Как я могу пропустить проверку SSL с помощью libgit2sharp?

Я новичок в libgit2sharp (и в git вообще). Я пытаюсь написать небольшую программу, которая унифицированно обрабатывает несколько репозиториев. Однако я наткнулся на кирпичную стену, пытаясь отключить проверку SSL. Библиотека, похоже, не предоставляет простой способ сделать это. Я нашел ветку (которая, кажется, решает проблему) и скопировал некоторый код из здесь

Мой текущий код выглядит так (я удалил личные вещи"):

static void Main(string[] args)
        {
//Additional code
            RemoteCertificateValidationCallback certificateValidationCallback = (sender, certificate, chain, errors) => { return true; };
            ServicePointManager.ServerCertificateValidationCallback = certificateValidationCallback;
           GlobalSettings.RegisterSmartSubtransport<MockSmartSubtransport>("https");
//Additional code end
          //  Repository rep = new Repository(@"workingdirpath");
            Repository.Clone("url.git", "workingdirpath", new CloneOptions
            {
                CredentialsProvider = new CredentialsHandler(getCredentials),
                Checkout = true,
            });
            //Remote remote = rep.Network.Remotes.Add("master", "url.git");
            //rep.Network.Pull(new Signature("me", "[email protected]", new DateTimeOffset(DateTime.Now.AddDays(-2))), new PullOptions
            //    {
            //        FetchOptions = new FetchOptions { CredentialsProvider = new CredentialsHandler(getCredentials), TagFetchMode = TagFetchMode.Auto },
            //    });


        }

        private static Credentials getCredentials(string url, string usernameFromUrl, SupportedCredentialTypes types)
        {
            return new UsernamePasswordCredentials
            {
                Username = "myaccount",
                Password = "mypass",
            };
        }

Класс «MockSmartSubtransport» можно найти в связанной ветке.

Моя проблема в том, что код, кажется, работает (кажется, что он отключает проверку SSL), но я все еще получаю исключение "{"Удаленный сервер вернул ошибку: (401) Несанкционировано."}" исключение с сервера. Без дополнительного кода я получаю: "{"пользователь отменил проверку сертификата:"}" с сервера.

После отладки мне кажется, что делегат для моих учетных данных никогда не вызывается (хотя он регистрируется для обратного вызова при попытке выполнить любую из операций). Я проверил правильность имени пользователя/пароля, войдя на сервер через Chrome и выполнив коммит с TortoiseGit.

На данный момент я не уверен, что проблема все еще в SSL или в чем-то еще.

Любые идеи? Если я недостаточно конкретен в отношении проблемы, я постараюсь дать больше информации (пожалуйста, спросите).


person Laurentiu Ilici    schedule 30.01.2015    source источник
comment
Вы продолжаете упоминать SSL как проблему, но потом говорите, что ваша проблема в том, что вы не можете аутентифицироваться на сервере. Поскольку это две совершенно разные вещи, не могли бы вы указать, с какой из них у вас сейчас проблемы?   -  person Carlos Martín Nieto    schedule 30.01.2015


Ответы (1)


После отладки мне кажется, что делегат для моих учетных данных никогда не вызывается

Нет. Не знают, потому что вы пошли и зарегистрировали свой субтранспорт. Это не то, что следует делать, не зная точно, что вы делаете. Это не для тривиальных мелочей, таких как сертификаты SSL, это для тех случаев, когда у вас есть собственный полный, существующий стек HTTP, который вы хотите использовать, и вы просто не можете использовать тот, который включен в LibGit2Sharp.

Если вы экспериментируете, думая, что, возможно, использование собственного субтранспорта решит очень простую проблему, то нет. А вытащить тест и попытаться заставить его работать, скорее всего, не удастся.

Если вам нужно отключить проверку SSL, используйте параметр конфигурации http.sslVerify.

person Edward Thomson    schedule 01.07.2015