[git] git이 자체 서명 된 인증서를 수락하도록하려면 어떻게해야합니까?

Git을 사용하면 자체 서명 된 인증서를 수락하도록 지시 할 수 있습니까?

https 서버를 사용하여 git 서버를 호스팅하고 있지만 현재 인증서는 자체 서명되어 있습니다.

처음으로 레포를 만들려고 할 때 :

git push origin master -f

오류가 발생합니다.

error: Cannot access URL
https://the server/git.aspx/PocketReferences/, return code 22

fatal: git-http-push failed



답변

특정 인증서를 영구적으로 수락하려면

http.sslCAPath또는을 시도하십시오 http.sslCAInfo. Adam Spiers의 답변 은 훌륭한 예입니다. 이것이 질문에 대한 가장 안전한 솔루션입니다.

단일 git 명령에 대해 TLS / SSL 확인을 비활성화하려면

통과 시도 -cgit적절한 설정 변수로, 또는 사용 유량의 답변을 :

git -c http.sslVerify=false clone https://example.com/path/to/git

특정 리포지토리에 대한 SSL 확인을 비활성화하려면

저장소가 완전히 제어 할 수있는 경우 다음을 시도 할 수 있습니다.

git config --global http.sslVerify false

에 몇 가지 SSL 구성 옵션이 git있습니다. 의 맨 페이지에서 git config:

http.sslVerify
    Whether to verify the SSL certificate when fetching or pushing over HTTPS.
    Can be overridden by the GIT_SSL_NO_VERIFY environment variable.

http.sslCAInfo
    File containing the certificates to verify the peer with when fetching or pushing
    over HTTPS. Can be overridden by the GIT_SSL_CAINFO environment variable.

http.sslCAPath
    Path containing files with the CA certificates to verify the peer with when
    fetching or pushing over HTTPS.
    Can be overridden by the GIT_SSL_CAPATH environment variable.

몇 가지 다른 유용한 SSL 구성 옵션 :

http.sslCert
    File containing the SSL certificate when fetching or pushing over HTTPS.
    Can be overridden by the GIT_SSL_CERT environment variable.

http.sslKey
    File containing the SSL private key when fetching or pushing over HTTPS.
    Can be overridden by the GIT_SSL_KEY environment variable.

http.sslCertPasswordProtected
    Enable git's password prompt for the SSL certificate. Otherwise OpenSSL will
    prompt the user, possibly many times, if the certificate or private key is encrypted.
    Can be overridden by the GIT_SSL_CERT_PASSWORD_PROTECTED environment variable.


답변

당신은 설정할 수 있습니다 GIT_SSL_NO_VERIFY합니다 true:

GIT_SSL_NO_VERIFY=true git clone https://example.com/path/to/git

또는 명령 줄에서 연결을 확인하지 않도록 Git을 구성하십시오.

git -c http.sslVerify=false clone https://example.com/path/to/git

SSL / TLS 인증서를 확인하지 않으면 MitM 공격에 취약합니다 .


답변

보안 검사를 비활성화하는 것이 첫 번째 해결책이 아니라 최후의 수단이어야하므로 기존 답변 의 [편집 : 원본 버전]에 대한 열렬한 팬이 아닙니다. 추가 확인 방법없이 첫 번째 영수증에서 자체 서명 된 인증서를 신뢰할 수는 없지만 후속 git작업에 인증서를 사용하면 인증서를 다운로드 한 후에 만 발생하는 공격의 경우 수명이 훨씬 더 어려워집니다 . 다시 말해, 다운로드 한 인증서 정품이면 그 시점부터 양호합니다. 대조적으로, 단순히 검증을 비활성화하면 어떤 시점 에서든 모든 종류의 중간자 공격 광범위하게 노출됩니다 .

구체적인 예를 들자면 유명한 repo.or.cz저장소는 자체 서명 된 인증서를 제공 합니다 . 해당 파일을 다운로드하여 같은 곳에 배치 /etc/ssl/certs한 다음 수행 할 수 있습니다.

# Initial clone
GIT_SSL_CAINFO=/etc/ssl/certs/rorcz_root_cert.pem \
    git clone https://repo.or.cz/org-mode.git

# Ensure all future interactions with origin remote also work
cd org-mode
git config http.sslCAInfo /etc/ssl/certs/rorcz_root_cert.pem

git config여기서 local을 사용 하지 않으면 (즉, --global)이 자체 서명 인증서는이 특정 리포지토리에 대해서만 신뢰할 수 있다는 것을 의미합니다. 또한 사용하는 것보다 더 좋아 GIT_SSL_CAPATH는 위험 제거하기 때문에 git잠재적으로 손상 될 수있는 다른 인증 기관을 통해 검증을하고 있습니다.


답변

힘내 자체 서명 인증서 구성

tl; dr

모든 SSL 확인을 비활성화하지 마십시오!

이것은 나쁜 보안 문화를 만듭니다. 그 사람이되지 마십시오.

당신이 따르는 구성 키는 다음과 같습니다.

  • http.sslverify-항상 그렇습니다. 위의 참고 사항을 참조하십시오.

신뢰할 수있는 호스트 인증서를 구성하기위한 것입니다.

SSL 문제에 응답하도록 인증서를 구성하기위한 것입니다.

위의 설정을 특정 호스트에 선택적으로 적용하십시오.

.gitconfig자체 서명 인증 기관을위한 글로벌

본인과 동료를 위해 여기에 자체 서명 인증서를 비활성화하지 않고 작동시키는 방법이 나와 sslVerify있습니다. 다음.gitconfiggit config --global -e추가 하여편집하십시오 .

# Specify the scheme and host as a 'context' that only these settings apply
# Must use Git v1.8.5+ for these contexts to work
[credential "https://your.domain.com"]
  username = user.name

  # Uncomment the credential helper that applies to your platform
  # Windows
  # helper = manager

  # OSX
  # helper = osxkeychain

  # Linux (in-memory credential helper)
  # helper = cache

  # Linux (permanent storage credential helper)
  # https://askubuntu.com/a/776335/491772

# Specify the scheme and host as a 'context' that only these settings apply
# Must use Git v1.8.5+ for these contexts to work
[http "https://your.domain.com"]
  ##################################
  # Self Signed Server Certificate #
  ##################################

  # MUST be PEM format
  # Some situations require both the CAPath AND CAInfo
  sslCAInfo = /path/to/selfCA/self-signed-certificate.crt
  sslCAPath = /path/to/selfCA/
  sslVerify = true

  ###########################################
  # Private Key and Certificate information #
  ###########################################

  # Must be PEM format and include BEGIN CERTIFICATE / END CERTIFICATE,
  # not just the BEGIN PRIVATE KEY / END PRIVATE KEY for Git to recognise it.
  sslCert = /path/to/privatekey/myprivatecert.pem

  # Even if your PEM file is password protected, set this to false.
  # Setting this to true always asks for a password even if you don't have one.
  # When you do have a password, even with this set to false it will prompt anyhow.
  sslCertPasswordProtected = 0

참고 문헌 :

git clone-ing 시 설정 지정

리포 단위로 적용해야하는 경우 문서는 git config --localrepo 디렉토리에서 실행하도록 지시합니다 . repo를 로컬로 복제하지 않았을 때 유용하지 않습니다.

global -> local위와 같이 전역 구성을 설정하여 Hokey-pokey를 수행 한 다음 해당 설정이 복제되면 로컬 repo 구성에 복사하십시오 …

또는 당신이 할 수있는 것은 일단 복제되면 대상 저장소에 적용되는 구성 명령을 지정git clone 하는 것입니다.

# Declare variables to make clone command less verbose     
OUR_CA_PATH=/path/to/selfCA/
OUR_CA_FILE=$OUR_CA_PATH/self-signed-certificate.crt
MY_PEM_FILE=/path/to/privatekey/myprivatecert.pem
SELF_SIGN_CONFIG="-c http.sslCAPath=$OUR_CA_PATH -c http.sslCAInfo=$OUR_CA_FILE -c http.sslVerify=1 -c http.sslCert=$MY_PEM_FILE -c http.sslCertPasswordProtected=0"

# With this environment variable defined it makes subsequent clones easier if you need to pull down multiple repos.
git clone $SELF_SIGN_CONFIG https://mygit.server.com/projects/myproject.git myproject/

짧막 한 농담

편집 : 2.14.x / 2.15 에서이 하나의 라이너까지 특정 자식 버전의 절대 및 상대 경로에 대한 경고를 나타내는 VonC답변 을 참조하십시오

git clone -c http.sslCAPath="/path/to/selfCA" -c http.sslCAInfo="/path/to/selfCA/self-signed-certificate.crt" -c http.sslVerify=1 -c http.sslCert="/path/to/privatekey/myprivatecert.pem" -c http.sslCertPasswordProtected=0 https://mygit.server.com/projects/myproject.git myproject/

CentOS unable to load client key

CentOS 에서이 작업을 시도하고 .pem파일에서 제공하는 경우

unable to load client key: "-8178 (SEC_ERROR_BAD_KEY)"

그런 다음 Open SSL 대신 NSS를 사용 하는 방법에 대한 이 StackOverflow 답변 을 원할 curl것입니다.

그리고 당신은 소스 에서 다시 빌드curl 하고 싶습니다 :

git clone http://github.com/curl/curl.git curl/
cd curl/
# Need these for ./buildconf
yum install autoconf automake libtool m4 nroff perl -y
#Need these for ./configure
yum install openssl-devel openldap-devel libssh2-devel -y

./buildconf
su # Switch to super user to install into /usr/bin/curl
./configure --with-openssl --with-ldap --with-libssh2 --prefix=/usr/
make
make install

libcurl이 여전히 공유 라이브러리로 메모리에 있으므로 컴퓨터를 다시 시작하십시오.

파이썬, 핍 및 콘다

관련 : Windows에서 pip가 사용하는 CA Store에 사용자 지정 CA 루트 인증서를 추가하는 방법은 무엇입니까?


답변

이 문제가 계속 발생하므로 서버에서 자체 서명 인증서를 다운로드하여 ~ / .gitcerts에 설치 한 다음 git-config를 업데이트하여이 인증서를 가리 키도록 스크립트를 작성했습니다. 전역 구성에 저장되므로 원격 당 한 번만 실행하면됩니다.

https://github.com/iwonbigbro/tools/blob/master/bin/git-remote-install-cert.sh


답변

이 답변은 Michael Kauffman 작성한 이 기사 에서 발췌 한 것입니다 .

회사 SSL 인증서로 Windows 용 Git 사용

이슈 :

회사 SSL 인증서가 있고 콘솔 또는 VSCode에서 저장소를 복제하려는 경우 다음 오류가 발생합니다.

치명적 : ‘ https : // myserver / tfs / DefaultCollection / _git / Proj / ‘ 에 액세스 할 수 없음 : SSL 인증서 문제 : 로컬 발급자 인증서를 가져올 수 없습니다

해결책 :

  1. 루트 자체 서명 된 인증서를 파일로 내 보냅니다. 브라우저 내에서이 작업을 수행 할 수 있습니다.

  2. git 폴더에서 “ca-bundle.crt”파일을 찾습니다 (현재 버전 C : \ Program Files \ Git \ usr \ ssl \ certs이지만 과거에 변경되었습니다). 파일을 사용자 프로파일로 복사하십시오. VSCode와 같은 텍스트 편집기로 파일을 열고 내 보낸 인증서의 컨텐츠를 파일 끝에 추가하십시오.

이제 새 파일을 사용하도록 git을 설정해야합니다 :

git config --global http.sslCAInfo C:/Users/<yourname>/ca-bundle.crt

그러면 사용자 프로필 루트의 .gitconfig 파일에 다음 항목이 추가됩니다.

[http]
sslCAInfo = C:/Users/<yourname>/ca-bundle.crt


답변

특정 리포지토리에 대한 SSL 확인을 비활성화하려면 리포지토리가 완전히 제어 할 수있는 경우 다음을 시도 할 수 있습니다.

 git config --global http.sslVerify false