在Mac上使用https克隆git失败进行身份验证

8
在Mac mini上安装了Mavericks系统后,我在尝试从私有git服务器克隆代码时遇到了身份验证问题。我曾经在Windows和Ubuntu上多次使用此服务器安装和配置git,并且以前没有出现过这种问题。我现在不知道该尝试什么了。
症状:
git clone https://username@git.example.com:8448/git/libs/project.git
Cloning into 'project' ...
Password for 'https://username@git.example.com:8448': [1] note
fatal: Authentication failed for 'https://username@git.example.com:8448/git/libs/project.git'

[1] 在其他系统上,我不需要输入这个。我相信我已经配置好了我的git客户端,不会要求输入密码。在这个提示中,我提供的任何密码都不起作用。

我在我的~/.gitconfig文件中有以下内容:

[http]
        sslKey = /Users/macuser/auth/username.key
        sslCert = /Users/macuser/auth/username.pem
        sslVerify = false
[user]
        name = username
        email = username@example.com

当我设置客户端证书时,我收到了以下文件,将其放置在名为~/auth的文件夹中:

username.cer
username.p12
username.pem
ca.cer

我运行了以下命令以生成密钥文件:

openssl rsa -in /Users/macuser/auth/username.pem -out /Users/macuser/auth/username.key

然后我运行了git config命令,例如:

git config --global http.sslKey /Users/macuser/auth/username.key
git config --global http.sslCert /Users/macuser/auth/username.pem
git config --global http.sslVerify false

在按照上述步骤配置git之后,在其他系统上执行“git clone https”时,它可以正常工作。但是在安装了Xcode命令行工具的OS X Mavericks上,git无法进行身份验证。
我做错了什么?
提前感谢您。
编辑:
我想添加这个信息。服务器正在使用自签名证书或来自没有授权的机构的证书。这就是为什么我将http.sslVerify设置为false的原因。
以下是详细克隆命令。 Linux和Mac上的设置相同,除了auth文件夹位置。 Linux版本成功,而Mac版本失败。

http://cache.codebot.org/stackoverflow/linux-git-works.txt
http://cache.codebot.org/stackoverflow/mac-git-fails.txt

答案:

sudo port install git-core

根据您提供的日志,您在Linux上使用Git 1.8.3.2,在Mac上使用Git 1.8.3.4,因此这两个版本非常接近,并且Git ChangeLog没有显示任何可疑的更改,可能是导致您观察到不同行为的原因。那么curl或libcurl呢(我不确定Git如何使用curl)?您在这两台机器上使用的版本是什么? - herzbube
4个回答

4

当您尝试使用git clone命令时,如果提示输入密码,请在此处提供git个人访问令牌。

这将解决该问题。


1
解决方案是使用macports版本的git而不是使用包含在Xcode命令行工具中的版本。
sudo port install git-core

0

sslVerify false

如果你使用curl,那么这将完全禁用证书验证。

你可以通过以下方式获得更多细节:

GIT_CURL_VERBOSE=1 git clone https://...

检查其他系统是否没有一个%HOME%/_netrc(Windows)或~/.netrc(unix)文件中包含您的凭据,这可能解释了为什么您不需要在那里输入密码。

在您的情况下,可能是由于在mac上缺少Linux中/etc/ssl/certs/ca-certificates.crt中使用的CA和其他根证书。
尝试将该Linux文件的内容添加到客户端的git证书文件中,即您的<path/to/git/bin/curl-ca-bundle.crt>文件,有点类似this solution中所述。

OP sysrpl报告称这并非必需,因为sysrpl必须执行以下操作:

sudo port install git-core

在 Mac 上更新/重置 git 安装。


@sysrpl "在.netrc文件中找不到主机git.example.com;使用默认值":如果您知道git.example.com上的用户名应该有密码,则定义一个.netrc文件(如https://dev59.com/i2025IYBdhLWcg3wZlHd#6031266)。如果没有,请从URL中删除`username`(假设已经存在匿名访问,如http://thread.gmane.org/gmane.comp.version-control.git/204286)。 - VonC
在任何情况下,我都没有 .netrc 文件。删除 url 中的 username@ 会导致 git clone 要求我输入用户名。关于在提示时提供密码,我提供的任何密码都不可接受,无论是我的 giblet 登录密码还是用于创建密钥文件时 openssl rsa 使用的密码。 - sysrpl
抱歉,Linux Works版本已经修正。失败的差异从第14行开始,使用TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA进行* TLS 1.0连接。 - sysrpl
@sysrpl 一些根证书可能丢失了。我已经编辑了我的答案。 - VonC
服务器证书是自签名的。也就是说,它不来自任何证书颁发机构。这就是为什么我将http.sslVerify设置为false的原因。 - sysrpl
显示剩余2条评论

0

此严重身份验证错误的根本原因是缺少APP密码(在Bitbucket中)或令牌(在GitHub中)。要解决此问题,您应该建立一个APP密码或生成一个令牌(取决于您选择的提供商)。

当提示输入密码时,请使用此令牌或应用程序密码。

您可以按照以下步骤创建此凭据(生成后,请将其保存在安全位置):

  1. 对于Bitbucket:

    转到Bitbucket设置

    输入应用密码标签

    设置应用密码的权限。添加对账户工作区成员资格项目仓库拉取请求的读取访问权限。

点击创建

复制并安全保存您的应用密码。

对于GitHub,请访问https://github.com/settings/personal-access-tokens/new生成一个新的令牌。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接