我们的
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命令不应要求您再次提供密码或密钥链密码.
您也可以直接编辑.gitconfig文件,例如通过添加以下内容来使用特定URL的证书:
[http "https://git.example.com"]
sslCert = git.example.com