nwi*_*ler 6 git macos curl certificate libcurl
我们的Git服务器被更改为需要Git客户端访问时的证书/私钥。
我们的Windows用户被指示在本地导入证书,然后将Git配置为使用schannel支持SSL 的证书,如下所示:
git config --global http.sslBackend schannel
Run Code Online (Sandbox Code Playgroud)
这显然不适用于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
Run Code Online (Sandbox Code Playgroud)
完成此操作后,每当我尝试推/拉时,Git客户端都会询问私钥的密码,如下所示:
$ git pull
Password for 'cert:////Users/.../cert.pem': *********
Already up to date.
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉Git客户端(或底层curl客户端)使用macOS钥匙串来检索证书,密钥以及密钥的密码?
我知道较新的版本curl支持-E/--cert使用钥匙串的参数,但是我不确定是否可以通过Git客户端使用该参数。
我设法找到了一种在 macOS 上执行此操作的方法,使用Homebrew提供的 Git 和 cURL 版本:
使用 Homebrew 安装 cURL 和 Git:
brew install curl
brew install --with-curl git
Run Code Online (Sandbox Code Playgroud)
该--with-curl选项很重要,因为它将强制 Git 使用 Homebrew 版本的 cURL,其中包括通过 cURL 的-E/--cert参数对 macOS 钥匙串所需的支持。
Homebrew 版本的 cURL 支持使用参数提供的名称/别名在用户的钥匙串中查找证书-E/--cert,而普通 macOS 版本的 cURL 则不支持。
有必要安装支持 Homebrew 版本 cURL 的 Git,因为如果没有另外说明,它只会使用 macOS 中的版本。
如果您已经通过 Homebrew 安装了 Git,则必须使用以下选项重新安装它--with-curl:
brew reinstall --with-curl git
Run Code Online (Sandbox Code Playgroud)更新随着Homebrew Git 公式的最新更改,该--with-curl选项已被删除。如果您仍然想使用它,您可以执行以下操作来安装该特定版本的 Git - 这是在删除选项之前。要安装此特定版本的 Git 公式,请使用以下方法(基于这些说明) - 不过,您可能必须首先删除现有的 Git 安装:
# Install curl
brew install curl
# Install the last version of the Git formula that still has the --with-curl option
brew install --with-curl https://raw.githubusercontent.com/Homebrew/homebrew-core/a86ae8fc2b24001b3c6460a46dbfc6e323d2a4d1/Formula/git.rb
# Pin Git in Homebrew so that it does not get updated automatically
brew pin git
Run Code Online (Sandbox Code Playgroud)
将证书导入到用户的登录钥匙串中(双击证书文件,例如,如果它是.pfx格式的)。检查用户的登录钥匙串中是否存在证书(以及私钥 - 它们可能位于不同的条目中)并记下证书的名称。我们假设它被称为git.example.com.
配置 Git 以引用钥匙串中的证书条目。不要将其指向本地文件,而是提供存储在钥匙串中的证书名称。Homebrew 版本的 cURL 支持此功能:
git config --global http.sslCert git.example.com
Run Code Online (Sandbox Code Playgroud)
如果您只想将证书用于特定服务器,则可以使用以下语法将设置限制为该特定 URL:
git config --global http."https://git.example.com".sslCert git.example.com
Run Code Online (Sandbox Code Playgroud)完成上述步骤后,每当您使用 git.example.com 服务器运行 Git 命令时,Git/cURL 都应该尝试从您的钥匙串获取证书。
对于首次访问,它可能会显示一个窗口,要求您解锁登录钥匙串。提供该钥匙串的密码,并确保单击“始终允许”按钮。此后,进一步的 Git 命令不应要求您再次提供密码或钥匙串密码。
您还可以.gitconfig直接编辑该文件,例如添加以下内容以使用特定 URL 的证书:
[http "https://git.example.com"]
sslCert = git.example.com
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
818 次 |
| 最近记录: |