2017-02-16 77 views
7

运行我们正在利用我们的服务器上的内部证书时连接到HTTPS蠢货,TFS 2017年,我已经跟着TFS生成代理未按照服务

https://blogs.msdn.microsoft.com/tfssetup/2016/12/19/error-ssl-certificate-problem-unable-to-get-local-issuer-certificate/

的步骤以及步骤在这里:

git version 
git config --get remote.origin.url 
git config gc.auto 0 
git config --get-all http.https://ourtfsserver:8443/tfs/path/_git/project.extraheader 
git config --get-all http.proxy 
git -c http.extraheader="AUTHORIZATION: bearer ********" fetch --tags --prune --progress origin 
fatal: unable to access 'https://ourtfsserver:8443/tfs/path/_git/project/': SSL certificate problem: unable to get local issuer certificate 
##[error]Git fetch failed with exit code: 128 

https://blogs.msdn.microsoft.com/phkelley/2014/01/20/adding-a-corporate-or-self-signed-certificate-authority-to-git-exes-store/

错误作为服务运行时。

当同一代理配置运行,但使用\ run.cmd,而不是作为一种服务(相同的凭据),它的工作原理成功:

git version 
git config --get remote.origin.url 
git config gc.auto 0 
git config --get-all http.https://ourtfsserver:8443/tfs/path/_git/project.extraheader 
git config --get-all http.proxy 
git -c http.extraheader="AUTHORIZATION: bearer ********" fetch --tags --prune --progress origin 
git checkout --progress --force {hash here} 
(and continues onto next steps) 

然而,当我尝试手动使用我们生成代理运行如上所述,它给出与上述相同的Git fetch failed with exit code: 128。虽然我可以使用这些凭据手动git clone

所以我已经试过:

git config –global http.sslVerify false 

以及手动设置的配置文件中包括的变量。

我也安装了证书使用IE来获得它每个第二篇博客文章。

我可以手动拉下项目没有问题为好,既是我的帐户,并使用git clone https://ourtfsserver:8443/tfs/path/_git/project c:\somefolder

我们生成代理帐户我使用的是2017年TFS Update 1的RC2从2017年2月13日(https://www.visualstudio.com/en-us/news/releasenotes/tfs2017-update1)时,以前的版本不会让我们的构建代理根本连接到tfs https。我们旧版的TFS 2015构建代理仍然有效,但缺少v2代理的新功能。

编辑:使用set HTTP_PROXY=https://localhost:8888我能得到VSTS使用菲德勒作为代理,并提出一个请求:

CONNECT our.local.tfs.fqdn:8443 HTTP/1.1 
Host: our.local.tfs.fqdn:8443 
User-Agent: git/2.10.0 (vsts-agent-git/2.112.0) 

A SSLv3-compatible ClientHello handshake was found. Fiddler extracted the parameters below. 

Version: 3.3 (TLS/1.2) 
(bunch of other stuff it decrypted here) 

用于验证它有:

No Proxy-Authorization Header is present. 

No Authorization Header is present. 
+0

您是否按照链接中的步骤重新启动构建服务?和类似的问题在这里:https://github.com/Microsoft/vsts-agent/issues/688 –

+0

@ Eddie-MSFT是的我重新启动整个服务器几次试图让它工作:(是的,我看到之前的链接,并试图做他们有同样的事情,也是我最终在我的OP中的博客。我希望设置SSL_Verify为false将工作,因为它的内部我并不真正关心SSL太多,我们只启用它,因为构建代理首先需要使用PAT或其他auth类型 – John

回答

1

因此,我发现比全局禁用https验证更好的命令,希望尽管在将来更新构建代理时可以更好地处理此问题。

混帐配置--global HTTP。 “https://YOURTFS.SERVER.HERE:PORT/” .sslVerify假

这只会从检查(希望内部)的git服务器上禁用它。

0

,因为你不能手动使用构建代理帐户来运行该命令。请仔细检查您或您的伙伴是否修改了“项目收集构建服务”帐户的权限。如果你没有,请添加一个。

enter image description here

也确认生成代理版本,请确保已经更新到最新版本。你可以使用另一个新的构建代理来代替这个来缩小问题的范围。

如果上述无法解决问题,则可能需要一些更多的诊断信息,例如提供Fiddler跟踪。

+0

构建服务具有读取权限,构建代理在从命令运行时在我的凭据下运行时工作,但不是在使用我的凭据作为服务(无论是登录,还是作为服务运行)在尝试解决问题时,我甚至将构建帐户“tfsbuild”设置为构建和项目管理员。最新的github代理(2.112.0)。什么样的诊断信息woul d的帮助? – John

+0

@John由于这是一个连接问题,您可以尝试使用fiddler来跟踪相关信息。此外,如果有任何有用的信息,请检查构建服务器上的事件视图。您还可以为测试创建一个空的构建定义,以缩小构建任务的影响。 –

+1

Patrick,我尝试使用fiddler,但即使使用vsts设置'set VSTS_HTTP_PROXY = https://127.0.0.1:8888' fiddler在使用代理run.cmd时无法捕获我的流量。尽管现在查看源代码,但我发现它可能已被重命名为“HTTP_PROXY”,因此文档可能已过期。 https://github.com/Microsoft/vsts-agent/blob/master/docs/troubleshooting.md。我会在明天尝试一下,看看它是否能解决问题......如果能够让这个构建服务器工作而无需手动登录并启动该过程,那将是非常好的 – John

1

我也遇到了这个问题。你确定你更新了正确的自定义信任存储吗?代理目录\ externals \ git \ mingw64 \ ssl \ certs \ ca-bundle.crt中的一个?这似乎是代理人现在使用的那个。因此,即使您的系统git可能正常工作,代理也不会使用它,因此不会相信您的自签名SSL证书。

更新:如果失败,你可以尝试运行git.exe在那里和sslVerify标志设置为false,例如:

C:\agent\externals\git\cmd\git.exe config --global http.sslVerify false

+0

更新仍然是不行,但我能够运行'C:\ agent \ externals \ git \ cmd \ git.exe config --global http。sslVerify false'哪DID工作,即使我以前从普通的git路径做过,并用'git config --list'测试它显示为禁用。如果你想把这个命令添加到你的答案中,我会将其标记为解决方案,因为它确实使我找到了解决方案 – John

+0

奇怪!由于这一点,我最终在大多数服务器上使用了合适的SSL证书,因为这样做比实现这一点要便宜得多,而不是记住这一点并随时更改;-) – Peter

+0

什么是适当的SSL证书?付费?我们试图从我们的内部CA中使用一个,但它显然不能很好地工作;) – John

1

我有一个内部发行的证书(不自我为TFS签名)。下面是我得到这个对我的情况下工作的步骤:

  1. 我跟着的this guide步骤1中,然后下降导出的证书到证书文件夹,这看起来是这样的:E:\代理\ 1 \的外部\ git的\ mingw64 \ SSL \证书。
  2. 之后,我按照指示here来设置git配置。该命令(一个或多个)是这样的:

    git config --global http."https://tfs/tfs/".sslCAInfo "path\to\cert\certificate.cer" 
    git config --system http."https://tfs/tfs/".sslCAInfo "path\to\cert\certificate.cer" 
    
  3. 我做的最后一件事是重新启动代理服务,一切为之后的罚款。

编辑:我也运行代理构建服务域帐户下。

2

这是我为解决问题所做的。

  • 下载最新的GIT从https://git-scm.com/downloads

  • 在安装过程中安装程序,选择Windows证书存储SSL。

  • 转到程序文件并复制最新的GIT文件夹。

  • 将代理/外部内的git文件夹替换为最新的GIT 文件夹。

  • 重新启动代理程序并重新构建。

+0

谢谢你!你救了我的培根:) – andrecarlucci

1

致命的:无法访问服务器< >:SSL证书问题:无法获取本地发行人

有时运行以下命令出现工作但它不是!

C:\agent\externals\git\cmd\git.exe config --global http.sslVerify false

要检查我的意思是这条命令:

git config --list --show-origin 

这将列出所有PC上的Git的配置文件。

我的工作是检查c:\ ProgramData/Git/config文件。

我不得不格式化矿(换行和标签)和手动不得不添加sslVerifysslCAInfo(由于某种原因,在这种环境中,他们并没有获得设置)。

[core] 
    symlinks = false 
    autocrlf = true 
    fscache = true 
[color] 
    diff = auto 
    status = auto 
    branch = auto 
    interactive = true 
[pack] 
[help] 
    format = html 
[http] 
    sslVerify = false 
    sslCAInfo = C:/Program Files (x86)/Microsoft Visual 
Studio/2017/Enterprise/Common7/IDE/CommonExtensions/Microsoft/TeamFoundation/Team Explorer/Git/mingw32/ssl/certs/ca-bundle.crt 
[diff "astextplain"] 
    textconv = astextplain 
[rebase] 
    autosquash = true 

这允许服务帐户(没有登录权限)访问Git仓库。

我才知道,VS2017不会控释片CA束发挥出色:除了https://developercommunity.visualstudio.com/content/problem/48517/visual-studio-2017-ssl-certificate-problem-unale-t.html

这个:

sslcainfo = C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt 

我用这个:

sslCAInfo = C:/Program Files (x86)/Microsoft Visual 
    Studio/2017/Enterprise/Common7/IDE/CommonExtensions/Microsoft/TeamFoundation/Team Explorer/Git/mingw32/ssl/certs/ca-bundle.crt 

很显然,当你这会去除sslVerify = false