Может ли GOS-клиент macOS использовать сертификаты, хранящиеся в цепочке для ключей пользователя? - PullRequest
0 голосов
/ 26 апреля 2018

Наш сервер Git изменяется, чтобы требовать сертификат / закрытый ключ при доступе клиентов Git.

Наши пользователи Windows получили указание импортировать сертификат локально, а затем настроить Git на использование schannel с поддержкой SSL, как в

git config --global http.sslBackend schannel

Это очевидно не будет работать для пользователей MacOS. Есть ли способ сделать что-то похожее с клиентом Git на macOS?

Я обнаружил, что могу указать на сертификат и закрытый ключ в моей конфигурации Git, если а) они находятся в отдельных файлах и б) в формате .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 (или базовому клиенту curl) использовать цепочку ключей macOS для получения сертификата, ключа и ключевой фразы ключа?

Я знаю, что более новые версии curl поддерживают параметр -E/--cert для использования цепочки для ключей, но я не уверен, доступно ли это через клиент Git.

1 Ответ

0 голосов
/ 30 апреля 2018

Мне удалось найти способ сделать это для macOS, используя версии Git и cURL, предоставленные Homebrew :

  • Если вы этого еще не сделали, установите Homebrew для macOS .
  • Установите cURL и Git с помощью Homebrew:

    brew install curl
    brew install --with-curl git
    

    Опция --with-curl важна, поскольку она заставит Git использовать версию cURL для Homebrew, которая включает необходимую поддержку цепочки ключей macOS - через параметр -E/--cert cURL.

    Версия cURL для Homebrew поддерживает поиск сертификата в цепочке ключей пользователя, используя имя / псевдоним, предоставленный параметром -E/--cert, в то время как стандартная версия cURL для macOS этого не делает.

    Необходимо установить Git с поддержкой версии cURL для Homebrew, поскольку он просто будет использовать ту из macOS, если не указано иное.

    Если у вас уже есть Git, установленный через Homebrew, вы должны переустановить его с опцией --with-curl:

    brew reinstall --with-curl git
    

Обновление С недавним изменением формулы 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
  • Импортируйте сертификат в связку ключей вашего пользователя (дважды щелкните файл сертификата, например, если он в формате .pfx). Проверьте наличие ключа в логин вашего пользователя на наличие сертификата (и секретного ключа - они могут быть в разных записях) и запишите имя сертификата. Предположим, это называется git.example.com.

  • Настройте Git для ссылки на запись сертификата в вашей цепочке для ключей. Не указывайте на локальный файл, а укажите имя сертификата, хранящееся в цепочке для ключей. Homebrew-версия cURL поддерживает это:

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

    Если вы хотите использовать сертификат только для определенного сервера, вы можете использовать следующий синтаксис, чтобы ограничить настройку этим конкретным URL:

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

После того, как вы выполнили вышеуказанные шаги, всякий раз, когда вы запускаете команду Git с сервером git.example.com, Git / cURL должен пытаться получить сертификат из вашей цепочки для ключей.

Для первого доступа может появиться окно с просьбой разблокировать брелок для входа в систему. Введите пароль для этой цепочки для ключей и обязательно нажмите кнопку Всегда разрешать . После этого дальнейшие команды Git не должны требовать повторного ввода пароля или пароля цепочки для ключей.

Git credential dialog

Вы также можете редактировать файл .gitconfig напрямую, например, добавив следующее для использования сертификата для определенного URL:

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