2017-02-16 95 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