Krótko:
- Uzyskaj certyfikat z podpisem własnym
- Umieść go w jakimś (np.
~/git-certs/cert.pem
) Pliku
- Ustaw
git
zaufanie do tego certyfikatu przy użyciu http.sslCAInfo
parametru
Bardziej szczegółowo:
Uzyskaj certyfikat z podpisem własnym zdalnego serwera
Zakładając, że adres URL serwera to repos.sample.com
i chcesz uzyskać do niego dostęp przez port 443
.
Istnieje wiele opcji, jak to zdobyć.
Uzyskaj certyfikat za pomocą openssl
$ openssl s_client -connect repos.sample.com:443
Przechwyć dane wyjściowe do pliku cert.pem
i usuń wszystkie z wyjątkiem części między (włącznie) -BEGIN CERTIFICATE-
i-END CERTIFICATE-
Zawartość wynikowego pliku ~ / git-certs / cert.pem może wyglądać następująco:
-----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-----
Uzyskaj certyfikat za pomocą przeglądarki internetowej
Używam Redmine z repozytoriami Git i uzyskuję dostęp do tego samego adresu URL dla interfejsu internetowego i dla dostępu do wiersza poleceń git. W ten sposób musiałem dodać wyjątek dla tej domeny do mojej przeglądarki internetowej.
Korzystając z przeglądarki Firefox, poszedłem do Options -> Advanced -> Certificates -> View Certificates -> Servers
, znalazłem tam podpisanego przez siebie hosta, wybrałem go i za pomocą Export
przycisku otrzymałem dokładnie ten sam plik, co utworzony za pomocą openssl
.
Uwaga: byłem trochę zaskoczony, nie ma widocznej nazwy organu. Jest okej.
Posiadanie zaufanego certyfikatu w dedykowanym pliku
Poprzednie kroki powinny skutkować umieszczeniem certyfikatu w jakimś pliku. Nie ma znaczenia, jaki to plik, o ile jest widoczny dla twojego gita podczas uzyskiwania dostępu do tej domeny. użyłem~/git-certs/cert.pem
Uwaga: jeśli potrzebujesz więcej zaufanych certyfikatów z podpisem własnym, umieść je w tym samym pliku:
-----BEGIN CERTIFICATE-----
MIIDnzCCAocCBE/xnXAwDQYJKoZIhvcNAQEFBQAwgZMxCzAJBgNVBAYTAkRFMRUw
...........
/27/jIdVQIKvHok2P/u9tvTUQA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
AnOtHeRtRuStEdCeRtIfIcAtEgOeShErExxxxxxxxxxxxxxxxxxxxxxxxxxxxxxw
...........
/27/jIdVQIKvHok2P/u9tvTUQA==
-----END CERTIFICATE-----
To zadziała (ale testowałem to tylko z jednym certyfikatem).
Skonfiguruj git, aby ufał temu certyfikatowi
$ git config --global http.sslCAInfo /home/javl/git-certs/cert.pem
Możesz również spróbować zrobić to w całym systemie, używając --system
zamiast --global
.
I przetestuj to: będziesz mógł teraz komunikować się ze swoim serwerem bez uciekania się do:
$ git config --global http.sslVerify false #NO NEED TO USE THIS
Jeśli już ustawiłeś swojego gita na ignorowanie certyfikatów ssl, usuń to:
$ git config --global --unset http.sslVerify
i możesz też sprawdzić, czy wszystko zrobiłeś poprawnie, bez błędów ortograficznych:
$ git config --global --list
co powinno zawierać listę wszystkich zmiennych, które ustawiłeś globalnie. (Źle napisałem http na htt).