Настройка SSL в git для сертификата StartSSL, да и Self-signed сертифката тоже

После того как на своем рабочем компе год назад установил сборку msysGit для Windows так и не обновлял её и в принципе, ходил я по нешифрованному порту в своей домашней локалке и всё меня устраивало, пока не появилась необходимость выставить один из своих репозиториев во внешний мир. Тут уж мои параноик сказал: «Только шифрованный трафик, ибо PRISM не спит, да и вообще, много людей бессонницей страдают».

Отправился я на StartSSL, порегался и выписал себе сертификат. Бодро настроил свой сервер на шифрование трафика и давай менять origin в своих репозитроиях. И первый же мой pull-request сказал, что я инвалид и сертификаты мои непонято кем выписаны: «Не возможно проверить путь сертификации». Скоро сказка сказывается, да не скоро дело делается. В общем, даю готовое решение проблемы. Суть в том, что Git использует кучу всякого софта (принцип интероперабельности, итить его налево) для своей работы, и в том числе хранит список корневых сертификатов своим особенным образом в файле «curl-ca-bundle.crt» и наша задача положить туда наш промежуточный сертификат. Достать его можно следующим образом:

  1. Заходим бразуером по нашему адресу
  2. На значке ssl (значок замка перед адресом практически во всех браузерах) нажимаем правой кнопкой и смотрим свойства сертификата (см. рис 1.)
  3. Сохраняем сертификат в файл в кодировке base64.
  4. Открываем файл сертификата и его содержимое копируем в конец нашего файла «curl-ca-bundle.crt», у меня он находится по адресу C:/Program Files (x86)/Git/bin/curl-ca-bundle.crt

Инструкция по извлечению сертификата

Рисунок 1. Инструкция по извлечению сертификата


И теперь у нас проходит нормальное защищённое соединение без всякой ругани на неверные сертификаты.
Есть возможность так же указать произвольное расположение хранилища сертификатов. Для этого в файле настроек необходимо указать

[http]
sslCAinfo = C:/Program Files (x86)/Git/bin/curl-ca-bundle.crt

Так им же образом можно извлечь информацию и о самоподписанном сертификате и поместить его в доверенные сертификаты для git-a.
Собственно данная инструкция нацелена на то, чтобы избегать отключения проверок сертификатов, но если уж ничего не помогло, всегда можно попробовать отключить проверку валидности сертификатов с помощью параметра

[http]
sslVerify = false