특정 https 원격에 대한 특정 자체 서명 서버 인증서를 수락하도록 Git 구성 이 URL의 서버는 자체 서명

내가 사용중인 프로젝트의 sysadmin은 SSH가 “너무 많은 문제”라고 결정했습니다. 대신 https://URL (및 사용자 이름 / 암호 인증)을 통해 Git에 액세스 할 수 있도록 설정했습니다 . 이 URL의 서버는 자체 서명 된 인증서를 제공하므로 모든 사람이 인증서 유효성 검사를 해제하도록 권고했습니다. 이것은 보안 측면에서 좋은 설정이라고 생각하지 않습니다.

Git에 원격 X (또는 더 나은 저장소로 시작하는 원격 https://$SERVERNAME/)의 경우 특정 인증서를 수락하고 해당 인증서 수락 한다고 Git에 알릴 수 있습니까? 기본적으로 SSH의 서버 키 동작을 복제합니다.



답변

간단히:

  1. 자체 서명 된 인증서 받기
  2. 그것을 (예를 들어 ~/git-certs/cert.pem) 파일에 넣으십시오
  3. 매개 변수를 git사용하여이 인증서를 신뢰하도록 설정http.sslCAInfo

자세한 내용은 :

원격 서버의 자체 서명 된 인증서 받기

서버 URL이 repos.sample.com있고 port를 통해 액세스하려고 한다고 가정하십시오 443.

얻는 방법에는 여러 가지 옵션이 있습니다.

openssl을 사용하여 인증서 받기

$ openssl s_client -connect repos.sample.com:443

파일로 출력을 잡아 cert.pem와 (포함 등)을 제외한 모든 부분 사이를 삭제 -BEGIN CERTIFICATE-하고-END CERTIFICATE-

결과 파일 ~ / git-certs / cert.pem의 내용은 다음과 같습니다.

-----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-----

웹 브라우저를 사용하여 인증서 받기

Git 리포지토리와 함께 Redmine을 사용하고 웹 UI 및 git 명령 줄 액세스를 위해 동일한 URL에 액세스합니다. 이렇게하면 해당 도메인에 대한 예외를 웹 브라우저에 추가해야했습니다.

Firefox를 사용하여에 가서 자체 Options -> Advanced -> Certificates -> View Certificates -> Servers서명 된 호스트를 발견하고 그것을 선택했으며 Export버튼을 사용하여을 사용하여 만든 것과 정확히 동일한 파일을 얻었습니다 openssl.

참고 : 나는 조금 놀랐습니다. 눈에 띄게 언급 된 권위의 이름은 없습니다. 이건 괜찮아.

전용 파일에 신뢰할 수있는 인증서 보유

이전 단계에서는 일부 파일에 인증서가 있어야합니다. 해당 도메인에 액세스 할 때 자식이 볼 수있는 한 파일은 중요하지 않습니다. 나는 사용했다~/git-certs/cert.pem

참고 :보다 신뢰할 수있는 자체 서명 된 인증서가 필요한 경우 동일한 파일에 넣으십시오.

-----BEGIN CERTIFICATE-----
MIIDnzCCAocCBE/xnXAwDQYJKoZIhvcNAQEFBQAwgZMxCzAJBgNVBAYTAkRFMRUw
...........
/27/jIdVQIKvHok2P/u9tvTUQA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
AnOtHeRtRuStEdCeRtIfIcAtEgOeShErExxxxxxxxxxxxxxxxxxxxxxxxxxxxxxw
...........
/27/jIdVQIKvHok2P/u9tvTUQA==
-----END CERTIFICATE-----

이것은 작동하지만 (단일 인증서로만 테스트했습니다).

이 인증서를 신뢰하도록 git 구성

$ git config --global http.sslCAInfo /home/javl/git-certs/cert.pem

--system대신을 사용하여 해당 시스템 전체를 시도 할 수도 있습니다 --global.

그리고 그것을 테스트하십시오 : 이제 다음에 의존하지 않고 서버와 통신 할 수 있습니다 :

$ git config --global http.sslVerify false #NO NEED TO USE THIS

git을 ssl 인증서를 무시하도록 이미 설정 한 경우 설정을 해제하십시오.

$ git config --global --unset http.sslVerify

또한 철자 오류없이 올바르게 수행했는지 확인할 수도 있습니다.

$ git config --global --list

모든 변수를 나열해야 할 것은 전체적으로 설정 한 것입니다. (http를 htt로 잘못 입력했습니다).


답변

OSX 사용자 조정.

수락 된 답변의 단계를 따르면 OSX에서 구성 할 때 약간의 추가로 나에게 도움이되었습니다.

cert.pem파일을 OSX 로그인 사용자 아래의 디렉토리에 넣고 신뢰할 수있는 인증서의 위치를 ​​조정하게했습니다.

이 인증서를 신뢰하도록 git을 구성하십시오.

$ git config --global http.sslCAInfo $HOME/git-certs/cert.pem