如何使用libgit2sharp跳过SSL验证



我是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", "me@company.de", 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是否仍然是问题或其他问题。

有什么想法吗?如果我对问题不够具体,我会尝试提供更多信息(请询问)。

调试后,在我看来,我的凭据的委托从未被调用

不。 他们没有,因为你已经去注册了自己的子交通工具。 这不是在没有确切知道你在做什么的情况下应该做的事情。 这不是针对像SSL证书这样的琐碎小东西,而是当您拥有自己想要使用的完整现有HTTP堆栈并且根本无法使用LibGit2Sharp中包含的堆栈时。

如果你正在尝试使用自己的子交通工具可以解决一个非常简单的问题,那么它不会。 拉出测试并试图使其真正起作用可能会失败。

如果需要关闭 SSL 验证,请使用http.sslVerify配置设置。

最新更新