我是libgit2sharp的新手(和git一般)。我正在尝试编写一个以统一方式处理多个存储库的小程序。但是,在尝试停用SSL验证时,我遇到了困难。该库似乎没有提供一个简单的方法来做到这一点。我找到了一个分支(似乎处理了这个问题)并从there
复制了一些代码我目前的代码看起来像这样(我删除了个人资料):
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仍然是问题还是其他问题。
有什么想法吗?如果我对这个问题不够具体,我会尝试提供更多信息(请询问)。
答案 0 :(得分:1)
在调试之后,在我看来,我的凭证委托永远不会被称为
没有。他们没有,因为你已经离开并注册了自己的子运输。如果不确切知道自己在做什么,这不是应该做的事情。这不适用于像SSL证书这样的小事,这适用于你想要使用自己完整的现有HTTP堆栈而你根本无法使用LibGit2Sharp中包含的那个。
如果您正在尝试思考可能使用您自己的子运输将解决一个非常简单的问题,那么它将不会。拉出测试并尝试使其真正起作用可能会失败。
如果您需要关闭SSL验证,请使用http.sslVerify
配置设置。