자체 서명 된 인증서가있는 Windows에서 git을 사용하여 "로컬 발급자 인증서를 가져올 수 없음"을 확인할 수 없습니다


283

Windows에서 Git을 사용하고 있습니다. msysGit 패키지를 설치했습니다. 테스트 저장소에는 서버에 자체 서명 된 인증서가 있습니다. 문제없이 HTTP를 사용하여 저장소에 액세스하고 사용할 수 있습니다. HTTPS로 이동하면 오류가 발생합니다.

SSL 인증서 문제 : 로컬 발급자 인증서를 가져올 수 없습니다.

Windows 7 클라이언트 시스템의 신뢰할 수있는 루트 인증 기관에 자체 서명 된 인증서가 설치되어 있습니다. Internet Explorer에서 오류 메시지없이 HTTPS 저장소 URL을 탐색 할 수 있습니다.

Philip Kelley의이 블로그 게시물 은 cURL이 클라이언트 시스템의 인증서 저장소를 사용하지 않는다고 설명했습니다. 블로그 게시물의 조언에 따라 개인 복사본을 만들고 curl-ca-bundle.crt그것을 사용하도록 Git을 구성했습니다. Git이 내 사본을 사용하고 있다고 확신합니다. 사본의 이름을 바꾸면 힘내 파일이 없다고 불평합니다.

블로그 게시물에 언급 된대로 인증서에 붙여 넣었지만 여전히 "로컬 발급자 인증서를 얻을 수 없습니다"라는 메시지가 나타납니다.

HTTPS를 통해 GitHub 리포지토리를 복제하여 Git이 여전히 작동하는지 확인했습니다.

블로그 게시물과 다른 점은 내 인증서 루트라는 것입니다. 체인에 연결할 체인이 없습니다. 내 인증서는 원래 IIS8 IIS 관리자 링크 '자체 서명 된 인증서 만들기'를 클릭하여 생성되었습니다. 어쩌면 cURL이 기대하는 것과 다른 방식으로 인증서를 만들 수 있습니다.

자체 서명 된 인증서를 수락하도록 Git / cURL을 받으려면 어떻게해야합니까?



1
또한 로컬 네트워크가 파일을 github 저장소로 푸시 할 수 있는지 확인하십시오. 방화벽이나 바이러스 백신 제한이있을 수 있습니다.
shasi kanth

Bower를 사용하는 동안이 오류가 발생하면 content .bowerrc 파일을 작성하십시오 { "strict-ssl": false }. 고마워요,이 녀석에게 감사하십시오 : stapp.space/fight-with-2 이 오류로 5 시간 가까이 똑바로 싸웠습니다 !!
Ganesh Jadhav

답변:


267

SSL 확인을 완전히 비활성화하려면 Git Bash를 열고 명령을 실행하십시오.

git config --global http.sslVerify false

참고 :이 솔루션을 사용하면 중간자 공격과 같은 공격을받을 수 있습니다. 따라서 가능한 빨리 확인을 다시 켜십시오.

git config --global http.sslVerify true

70
이 답변은 MITM (Man-in-the-Middle) 공격을 허용하여 SSL의 보안을 무효화합니다. 다른 답변은 필요한 특정 인증서를 신뢰하도록 git을 구성하는 방법을 이미 설명했습니다.
dsh December

12
실제로 끔찍한 대답은 SSL을 다시 켜도록 지시하지도 않습니다. 이것이 보안 취약점이 발생하는 이유입니다.
Edgar Aroutiounian

Gitblit을 사용하는 경우 sshVerify false를 수행하는 대신 다른 옵션이 없습니다.
Samir

24
단일 git 명령에 대해 TLS / SSL 확인을 비활성화하려면 다음 명령을 사용하십시오.git -c http.sslVerify=false clone https://domain.com/path/to/git
Maxim Suslov

1
아래에 이미 여러 가지 해결책이 있으며 이미 단점을 제안했습니다. 따라서 문제를 해결하기 위해 어떤 솔루션을 선택하고 있는지는 귀하에게 달려 있습니다.
Samir

153

문제는 기본적으로 "Linux"암호화 백엔드를 사용하는 자식입니다.

Windows 2.14 용 Git부터는 기본 제공 Windows 네트워킹 계층 인 SChannel을 암호화 백엔드로 사용하도록 Git을 구성 할 수 있습니다. 이는 Windows 인증서 저장 메커니즘을 사용하고 curl CA 저장 메커니즘을 명시 적으로 구성 할 필요가 없음을 의미합니다. https://msdn.microsoft.com/en-us/library/windows/desktop/aa380123(v= vs.85) .aspx

그냥 실행하십시오 :

git config --global http.sslbackend schannel

도움이 될 것입니다.

schannel을 사용하는 것은 이제 Windows 용 git을 설치할 때 표준 설정이며, https가 구성하기 쉽고 방화벽에 의해 차단 될 가능성이 적기 때문에 가능한 경우 SSH로 저장소를 체크 아웃하지 않는 것이 좋습니다. 실패 가능성이 적습니다.


1
그러나이 솔루션은 git config --global http.sslCAInfo <my-server-self-signed-cert.pem>작동하지 않을 수 있습니다. http.sslCAInfo서버에 자체 서명 된 인증서를 사용 하도록 구성 했으며, 예를 들어 git clone https://github.com/Microsoft/vscode.git. 마지막으로 stackoverflow.com/a/47196562/1323552 (Ben PP Tung) 의 답변을 사용하여 git 서버에 특정한 sslCAInfo 구성을 조정하여 해결했습니다.
Johnny Wong

94

나는이 문제도 가지고 있었다. 필자의 경우, 푸시 할 때마다 서버에서 작업 사본을 업데이트하기 위해 수신 후 Git 후크를 얻으려고했습니다. 링크 한 블로그의 지침을 따르려고했습니다. 나에게도 효과가 없었으며 사용자별로 설정을 재정의하는 것도 효과가없는 것 같습니다.

내가해야 할 일은 Git에 대한 SSL 확인 (문서에서 언급했듯이)을 비활성화하는 것이 었습니다. 완벽한 솔루션은 아니지만 더 나은 솔루션을 찾을 때까지 작동합니다.

Git 구성 텍스트 파일을 편집했습니다 (Notepad ++와 같은 좋아하는 줄 끝 중립 앱 사용).

C : \ 프로그램 파일 (x86) \ Git \ etc \ gitconfig

[http] 블록에서 sslVerify를 비활성화하는 옵션을 추가했습니다. 내가 끝났을 때 이렇게 보였다 :

[http]
    sslVerify = false
    sslCAinfo = /bin/curl-ca-bundle.crt

그 트릭을했다.

노트:

  • 이는 SSL 확인을 비활성화하며 장기 솔루션으로 권장되지 않습니다.

  • 이 저장소별로 비활성화해도 여전히 좋지는 않지만 설정을 현지화합니다.

  • LetsEncrypt.org가 등장하면서 자체 서명 인증서 대신 SSL을 설정하는 것이 매우 간단하고 자동화되었으며 무료이며 sslVerify를 끌 필요가 없습니다.


145
이것은 SSL의 목적을 무효화합니다.
syaz

49
"git config --global http.sslVerify false"명령을 사용하여 SSL 확인을 비활성화 할 수 있습니다
CleanCoder

6
sslCAinfo구성 항목 을 지적 해 주셔서 감사합니다 . 하지만 시스템 전체에서 git에 대해 SSL을 영구적으로 비활성화하는 것이별로 의미가 없기 때문에 답을 찬성하지 않습니다 (시스템 전체에서 비활성화 한 다음 복제 한 다음 다시 활성화 한 다음 비활성화하십시오. 새로 복제 된 리포지토리에 대한 로컬 자식 구성?).
7heo.tk

35
일회성 명령의 경우 구성 파일을 변경할 필요가 없습니다.git -c http.sslVerify=false clone https://...
pts


51

키 덜리 꽤 가깝다고 생각하지만 SSL 확인을 비활성화하지 않고 오히려 로컬 인증서를 제공합니다.

Git 설정 파일에서

[http]
    sslCAinfo = /bin/curl-ca-bundle.crt

또는 명령 줄을 통해 :

git config --global http.sslCAinfo /bin/curl-ca-bundle.crt

7
창문 자식,이입니다git config --global http.sslCAinfo /usr/ssl/certs/ca-bundle.crt
카르 스텐 Tinnefeld

또는 나를 위해git config --global http.sslCAinfo /c/Program\ Files\ \(x86\)/Git/bin/curl-ca-bundle.crt
참새

MacPorts 사용자의 경우git config --global http.sslCAinfo /opt/local/share/curl/curl-ca-bundle.crt
miken32

3
Git 2.8을 사용 git config --list --show-origin하면 http.sslCAinfo 설정이 설정된 위치를 확인할 수 있습니다.
Anish

맥에서 내 인증서 위치는 ~ / macports / share / curl / curl-ca-bundle.crt
user3282611

47

나는 또한이 문제에 직면했다. 그리고 마지막 으로이 MSDN 블로그 에서 지침을 받아 해결되었습니다 .

최신 정보

실제로 Git \ bin 디렉토리에있는 git의 인증서 파일 curl-ca-bundel.cert에 인증서를 추가해야합니다.

단계

  1. 브라우저에서 github 페이지를 열고 주소 표시 줄에서 자물쇠 아이콘을 클릭하십시오.
  2. 열린 작은 팝업에서 '인증서보기'링크로 이동하면 팝업 창이 열립니다.
  3. 인증서 탭으로 이동합니다 (필자의 경우 세 번째). 루트 인증서 인 최상위 노드를 선택하십시오. 그리고 하단의 인증서 복사 버튼을 누르고 파일을 저장하십시오.
  4. 파일 탐색기에서 Git \ bin 디렉토리를 탐색하고 텍스트 편집기에서 curl-ca-bundle.crt를 엽니 다.
  5. 텍스트 편집기에서 내 보낸 인증서 파일 (3 단계)도 엽니 다.
  6. 내 보낸 인증서의 모든 내용을 curl-ca-bundle.crt의 끝으로 복사하고 저장하십시오.

마지막으로 상태를 확인하십시오. 안전한면을 유지하기 위해 편집하기 전에 backup curl-ca-bundle.crt 파일을 참고하십시오.


3
"Git \ bin 디렉토리를 탐색하고 curl-ca-bundle.crt를여십시오"git \ bin에는 curl-ca-bundle.crt가 없습니다!
Anton K

@AntonK가 없으면 메모장에서 직접 만들고 curl-ca-bundle.crt로 이름을 바꿉니다. 다른 단계는 동일하게 유지됩니다.
Nadeem Jamali

16
@AntonK 그냥 호출 ca-bundle.crt되어 mingw64\ssl\certs또는에 있을 수 있습니다 mingw32\ssl\certs.
Ian Kemp

Atlassian의 SourceTree에 사용했습니다. 번들로 제공되는 GIT 설치는 % userprofile % \ appdata \ local \ attlassian \ sourcetree \ git_local에 있습니다. curl-ca-bundle.crt가 이미 존재하며 base64로 인코딩 된 내 보낸 루트 인증서를 추가했습니다.
Xanothos

40

이 질문에 대한 답변 개발 용 SSL을 사용하여 SSL을 수정했습니다.

이유를 모르겠지만 IIS 관리자의 간단한 '자체 서명 된 인증서 만들기'링크로 만든 인증서는 트릭을 수행하지 않습니다. 자체 서명 된 CA 루트를 만들고 설치하는 관련 질문의 접근 방식을 따랐습니다. 그런 다음이를 사용하여 서버에 대한 서버 인증 인증서를 발급합니다. IIS에 둘 다 설치했습니다.

그것은 원래 상황에서 언급 된 블로그 게시물과 같은 상황을 얻습니다. 루트 인증서가 curl-ca-bundle.crt에 복사 / 붙여 넣기되면 git / curl 콤보가 만족됩니다.


"나는 이유는 모르겠지만, 간단한에 의해 생성 된 인증서가 트릭 ...하지 않는 IIS 관리자에서 링크 '자체 인증서 서명 만들기'를" - 내가 말할 수있는 최선의, 그것은 잘못된 인증서를 만듭니다. X.509 인증서를 만들 때 많은 규칙이 있습니다. "최소한의 기능으로 작동"이 더 이상 제대로 작동하지 않습니다. 인증 기관에 인증서 서명 요청에 서명 하는 방법
jww

이것은 나를 위해 일했지만 "IIS에 둘 다 설치했습니다"부분에 일시적으로 끊어졌습니다. 다른 사람을 위해 해결하기 위해 ... 서버 인증서는 IIS에 할당되며 루트 CA는 Windows 인증서 관리자 유틸리티 (certmgr.msc)를 통해 "신뢰할 수있는 루트 인증 기관"으로 가져와야합니다.
Philip

26

ssl 확인을 완전히 비활성화하거나 git에서 사용하는 번들로 제공된 CA 인증서 파일을 복제 / 해킹하는 것을 피하기 위해 호스트의 인증서 체인을 파일로 내보내고 git에서 사용하도록 할 수 있습니다.

git config --global http.https://the.host.com/.sslCAInfo c:/users/me/the.host.com.cer

그래도 작동하지 않으면 호스트에 대해서만 SSL 확인을 비활성화 할 수 있습니다 .

git config --global http.https://the.host.com/.sslVerify false

참고 : SSL 인증이 꺼져있을 때 중간 공격에서 사람을 대상으로합니다.


4
--global옵션이 필요하지 않다는 점에 주목할 가치가 있습니다. 생략 --global하면 설정이 특정 git repo에만 적용됩니다.
Wes Turner

19

방금 같은 문제가 있었지만 Windows에서 sourcetree 사용 Windows의 일반 GIT에 대해서도 동일한 단계를 수행하십시오. 다음 단계에 따라이 문제를 해결할 수있었습니다.

  1. 서버 인증서 트리 얻기 Chrome을 사용하여 수행 할 수 있습니다. 서버 주소로 이동하십시오. 자물쇠 아이콘을 클릭하고 인증서를 봅니다. 모든 인증서 체인을 base64 인코딩 파일 (PEM) 형식으로 내 보냅니다.
  2. GIT 신뢰 구성 파일의 신뢰 체인에 인증서 추가 "git config --list"를 실행하십시오. "http.sslcainfo"구성을 찾으십시오. 이것은 인증서 신뢰 파일이있는 위치를 보여줍니다. "--BEGIN--"및 "--END--"를 포함하여 모든 인증서를 신뢰 체인 파일에 복사하십시오.
  3. 인증서 파일에 전체 인증서 체인을 추가해야합니다.

자체 서명 된 인증서 및 GIT를 사용하여 문제를 해결해야합니다.

"http.sslcapath"구성을 사용해 보았지만 작동하지 않았습니다. 또한 인증서 파일에 전체 체인을 포함시키지 않으면 이것이 실패합니다. 누구든지 이것에 대한 포인터가 있다면 새로 설치하기 위해 위의 과정을 반복해야한다는 것을 알려주십시오.

이것이 시스템 GIT 인 경우 도구-> 옵션 GIt 탭의 옵션을 사용하여 시스템 GIT를 사용하면 소스 트리의 문제도 해결할 수 있습니다.


2
"내가 인증서 파일의 전체 체인을 포함하지 않은 경우 다음이 또한 실패"- 난 그냥이 문제에 달렸다
아마니 Kilumanga에게

전체 체인을 포함하는 한 github 인증서 위에 두 개의 인증서가 있습니다. sslcainfo.crt 파일에서 root-> next cert-> github cert로 순서대로 포함합니까?
Jecoms

루트 인증서를 추가하여 git repo 패키지에 액세스 할 수있었습니다.
Jecoms

미래의 독자들을 위해. 중요한지는 모르겠지만 "root"(최상위) 인증서를 (http.sslcainfo) 파일의 끝에 넣습니다. 그런 다음 체인의 루트 인증서를 벗어나면서 해당 인증서를 (http.sslcainfo) 파일의 이전 항목 위에 놓습니다.
granadaCoder

11

의 경우 GitHub의 저장소 (또는 없음 - 자체 서명 인증서 표시) 설치하는 동안 아래의 선택, 힘내 - 창문에 문제를 해결.

여기에 이미지 설명을 입력하십시오


1
다른 질문에 답변 한 것 같습니다. OP의 질문은 Windows 클라이언트의 자체 서명 인증서와 관련이 있습니다.
jww

@ jww 질문 제목은 저장소가 자체 서명 SSL이 아닌 경우에도 표시되는 git 오류 메시지입니다!
Jawad Al Shaikh

이로 인해 오류가 발생했지만 GitHub Enterprise에 액세스하려면 키 생성과 공개 / 개인 키 추가가 필요했습니다.
ΩmegaMan

1
자체 서명 된 인증서를 그룹 정책을 통해 유용한 Windows 관리자가 Windows 인증서 저장소에 넣은 경우이 답변도 좋습니다.
JamesD

7

전에이 문제가 있었고 다음 구성을 사용하여 해결했습니다.

[http "https://your.domain"] sslCAInfo=/path/to/your/domain/priviate-certificate

git 2.3.1부터 https://your.domainhttp 다음에 다음 인증서가 있음을 표시하도록 넣을 수 있습니다 .


1
git config --global http.sslCAInfo <your-server-self-signed-cert.pem>이전에 구성한 경우 ( "로컬 발급자 인증서를 얻을 수 없음"오류 발생)
Johnny Wong

이것은 내 문제에 대한 정답이었습니다 (그리고 단순히 "SSL 유효성 검사 비활성화"가 아닙니다 ~ ~). 특정 호스트에 대해서만 인증서 위치를 지정할 수 있다는 것을 몰랐습니다. 에이스!
Rocío García Luque

1
  1. 이 링크에서 인증서를 다운로드하십시오 : https://github.com/bagder/ca-bundle
  2. 에 추가 C:\Program Files\Git\bin 하고C:\Program Files\Git\mingw64\bin

그런 다음 다음과 같이 시도하십시오. git clone https://github.com/heroku/node-js-getting-started.git


1

나를 엉망으로 만든 것은 경로 형식 (Windows PC)이었습니다. 나는 원래 이것을 가지고 있었다 :

git config --global http.sslCAInfo C:\certs\cacert.pem

그러나 "로컬 발급자 인증서를 얻을 수 없습니다"오류로 실패했습니다.

마지막으로 작동 한 것은 다음과 같습니다.

git config --global http.sslCAInfo "C:\\certs\\cacert.pem"

1

필자의 경우 ConEmu Terminal for Window 7을 설치 했으므로ca-bundle 설치 중에를 생성합니다 C:\Program Files\Git\mingw64\ssl\certs.

따라서 터미널에서 다음 명령을 실행해야 작동합니다.

$ git config --global http.sslbackend schannel
$ git config --global http.sslcainfo /mingw64/ssl/certs/ca-bundle.crt

따라서 내 C:\Program Files\Git\etc\gitconfig내용은 다음과 같습니다.

[http]
    sslBackend = schannel
    sslCAinfo = /mingw64/ssl/certs/ca-bundle.crt

또한 Git을 설치할 때 여기 에서 언급 한 것과 동일한 옵션을 선택했습니다 .

희망이 도움이됩니다!


1

특정 오류 SSL 인증서 문제 를 해결하려면 git에서 로컬 발급자 인증서를 가져올 수 없습니다.

Let 's Encrypt certificate와 같은 문제가있었습니다.

https가 필요한 웹 사이트 :

SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf

그러나 git pull은 말합니다 :

fatal: unable to access 'https://example.com/git/demo.git/': SSL certificate problem: unable to get local issuer certificate

수정하려면 다음을 추가해야합니다.

SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem

-5

composer 업데이트 / 설치를 실행하기 전에이 명령을 사용하십시오.

git config --global http.sslverify false
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.