Resumidamente:
- Obter o certificado autoassinado
- Coloque-o em algum
~/git-certs/cert.pem
arquivo (por exemplo )
- Configure
git
para confiar neste certificado usando o http.sslCAInfo
parâmetro
Em mais detalhes:
Obter certificado autoassinado do servidor remoto
Supondo que a URL do servidor seja repos.sample.com
e você deseja acessá-la pela porta 443
.
Existem várias opções, como obtê-lo.
Obter certificado usando o openssl
$ openssl s_client -connect repos.sample.com:443
Capture a saída em um arquivo cert.pem
e exclua tudo, exceto parte entre (e incluindo) -BEGIN CERTIFICATE-
e-END CERTIFICATE-
O conteúdo do arquivo resultante ~ / git-certs / cert.pem pode ter a seguinte aparência:
-----BEGIN CERTIFICATE-----
MIIDnzCCAocCBE/xnXAwDQYJKoZIhvcNAQEFBQAwgZMxCzAJBgNVBAYTAkRFMRUw
EwYDVQQIEwxMb3dlciBTYXhvbnkxEjAQBgNVBAcTCVdvbGZzYnVyZzEYMBYGA1UE
ChMPU2FhUy1TZWN1cmUuY29tMRowGAYDVQQDFBEqLnNhYXMtc2VjdXJlLmNvbTEj
MCEGCSqGSIb3DQEJARYUaW5mb0BzYWFzLXNlY3VyZS5jb20wHhcNMTIwNzAyMTMw
OTA0WhcNMTMwNzAyMTMwOTA0WjCBkzELMAkGA1UEBhMCREUxFTATBgNVBAgTDExv
d2VyIFNheG9ueTESMBAGA1UEBxMJV29sZnNidXJnMRgwFgYDVQQKEw9TYWFTLVNl
Y3VyZS5jb20xGjAYBgNVBAMUESouc2Fhcy1zZWN1cmUuY29tMSMwIQYJKoZIhvcN
AQkBFhRpbmZvQHNhYXMtc2VjdXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEP
ADCCAQoCggEBAMUZ472W3EVFYGSHTgFV0LR2YVE1U//sZimhCKGFBhH3ZfGwqtu7
mzOhlCQef9nqGxgH+U5DG43B6MxDzhoP7R8e1GLbNH3xVqMHqEdcek8jtiJvfj2a
pRSkFTCVJ9i0GYFOQfQYV6RJ4vAunQioiw07OmsxL6C5l3K/r+qJTlStpPK5dv4z
Sy+jmAcQMaIcWv8wgBAxdzo8UVwIL63gLlBz7WfSB2Ti5XBbse/83wyNa5bPJPf1
U+7uLSofz+dehHtgtKfHD8XpPoQBt0Y9ExbLN1ysdR9XfsNfBI5K6Uokq/tVDxNi
SHM4/7uKNo/4b7OP24hvCeXW8oRyRzpyDxMCAwEAATANBgkqhkiG9w0BAQUFAAOC
AQEAp7S/E1ZGCey5Oyn3qwP4q+geQqOhRtaPqdH6ABnqUYHcGYB77GcStQxnqnOZ
MJwIaIZqlz+59taB6U2lG30u3cZ1FITuz+fWXdfELKPWPjDoHkwumkz3zcCVrrtI
ktRzk7AeazHcLEwkUjB5Rm75N9+dOo6Ay89JCcPKb+tNqOszY10y6U3kX3uiSzrJ
ejSq/tRyvMFT1FlJ8tKoZBWbkThevMhx7jk5qsoCpLPmPoYCEoLEtpMYiQnDZgUc
TNoL1GjoDrjgmSen4QN5QZEGTOe/dsv1sGxWC+Tv/VwUl2GqVtKPZdKtGFqI8TLn
/27/jIdVQIKvHok2P/u9tvTUQA==
-----END CERTIFICATE-----
Obter certificado usando seu navegador da web
Eu uso o Redmine com repositórios Git e acesso a mesma URL para interface do usuário da web e para acesso à linha de comando git. Dessa forma, tive que adicionar uma exceção para esse domínio no meu navegador da web.
No Firefox, Options -> Advanced -> Certificates -> View Certificates -> Servers
encontrei o host autoassinado, o selecionei e, usando o Export
botão, obtive exatamente o mesmo arquivo, criado com o uso openssl
.
Nota: Fiquei um pouco surpreso, não há nome da autoridade visivelmente mencionada. Isto é bom.
Ter o certificado confiável em arquivo dedicado
As etapas anteriores devem resultar em um certificado em algum arquivo. Não importa, qual arquivo é, desde que seja visível para o seu git ao acessar esse domínio. eu usei~/git-certs/cert.pem
Nota: Se você precisar de certificados autoassinados mais confiáveis, coloque-os no mesmo arquivo:
-----BEGIN CERTIFICATE-----
MIIDnzCCAocCBE/xnXAwDQYJKoZIhvcNAQEFBQAwgZMxCzAJBgNVBAYTAkRFMRUw
...........
/27/jIdVQIKvHok2P/u9tvTUQA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
AnOtHeRtRuStEdCeRtIfIcAtEgOeShErExxxxxxxxxxxxxxxxxxxxxxxxxxxxxxw
...........
/27/jIdVQIKvHok2P/u9tvTUQA==
-----END CERTIFICATE-----
Isso deve funcionar (mas eu testei apenas com um único certificado).
Configure o git para confiar neste certificado
$ git config --global http.sslCAInfo /home/javl/git-certs/cert.pem
Você também pode tentar fazer esse sistema amplamente, usando em --system
vez de --global
.
E teste: agora você poderá se comunicar com seu servidor sem recorrer a:
$ git config --global http.sslVerify false #NO NEED TO USE THIS
Se você já configurou seu git para o desconhecimento de certificados SSL, desative-o:
$ git config --global --unset http.sslVerify
e você também pode verificar se fez tudo corretamente, sem erros de ortografia:
$ git config --global --list
o que deve listar todas as variáveis, você definiu globalmente. (Eu escrevi incorretamente o http para ott).