macOS Git客户端可以使用存储在用户钥匙串中的证书吗?

我们的
Git服务器被更改为在
Git客户端访问时需要证书/私钥.

我们的Windows用户被指示在本地导入证书,然后配置Git以使用支持SSL的schannel,如

git config --global http.sslBackend schannel

这显然不适用于macOS用户.有没有办法在macOS上用Git客户端做类似的事情?

我发现我可以指向我的Git配置中的证书和私钥,如果a)它们在单独的文件中,并且b)是.pem格式,如下所示:

git config --global http.sslCert /Users/.../cert.pem
git config --global http.sslKey /Users/.../key.pem
git config --global http.sslCertPasswordProtected true

执行此操作后,每当我尝试推/拉时,Git客户端都会询问私钥的密码,如下所示:

$git pull
Password for 'cert:////Users/.../cert.pem': *********
Already up to date.

有没有办法告诉Git客户端(或底层卷曲客户端)使用macOS Keychain来检索证书,密钥以及密钥的密码?

我知道较新版本的curl支持-E / – cert参数来使用keychain,但我不确定它是否可以通过Git客户端获得.

最佳答案 我设法为macOS找到了一种方法,使用
Homebrew提供的Git和cURL版本:

>如果您还没有这样做,请安装Homebrew for macOS.
>使用Homebrew安装cURL和Git:

brew install curl
brew install --with-curl git

–with-curl选项很重要,因为它会强制Git使用自制的cURL版本,其中包括对macOS Keychain的必需支持 – 通过cURL的-E / – cert参数.

自制软件版本的cURL支持使用-E / – cert参数提供的名称/别名在用户的钥匙串中查找证书,而cURL的库存macOS版本不支持.

有必要安装Git并支持自制的cURL版本,因为如果没有另外说明,它将只使用macOS中的那个.

如果您已经通过Homebrew安装了Git,则必须使用–with-curl选项重新安装它:

brew reinstall --with-curl git

>将证书导入用户的登录密钥链(双击证书文件,例如,如果它是.pfx格式).检查用户的登录密钥链中是否存在证书(以及私钥 – 它们可能位于不同的条目中)并记下证书的名称.我们假设它叫做git.example.com.
>配置Git以引用钥匙串中的证书条目.不要将其指向本地文件,而是提供存储在钥匙串中的证书名称.自制的cURL版本支持:

git config --global http.sslCert git.example.com

如果您只想将证书用于特定服务器,则可以使用以下语法将设置限制为该特定URL:

git config --global http."https://git.example.com".sslCert git.example.com

完成上述步骤后,每当您使用git.example.com服务器运行Git命令时,Git / cURL都应尝试从您的Keychain获取证书.

对于第一次访问,它可能会显示一个窗口,要求您解锁登录密钥链.提供该钥匙串的密码,并确保单击“始终允许”按钮.之后,进一步的Git命令不应要求您再次提供密码或密钥链密码.

《macOS Git客户端可以使用存储在用户钥匙串中的证书吗?》

您也可以直接编辑.gitconfig文件,例如通过添加以下内容来使用特定URL的证书:

[http "https://git.example.com"]                                                                                                                                   
    sslCert = git.example.com
点赞