서버 인증서 확인에 실패했습니다. CA 파일 : /etc/ssl/certs/ca-certificates.crt CRL 파일 : 없음


334

ssh를 사용하여 프로젝트를 복제하여 푸시 할 수는 있지만 https로 프로젝트를 복제하면 작동하지 않습니다.

나에게 표시되는 오류 메시지는 다음과 같습니다.

server certificate verification failed. CAfile: /etc/ssl/certs/cacertificates.crt CRLfile: none

답변:


422

TLDR :

hostname=XXX
port=443
trust_cert_file_location=`curl-config --ca`

sudo bash -c "echo -n | openssl s_client -showcerts -connect $hostname:$port -servername $hostname \
    2>/dev/null  | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'  \
    >> $trust_cert_file_location"

긴 대답

기본적인 이유는 컴퓨터Gitlab 서버에서 사용되는 인증서에 서명 한 인증 기관 을 신뢰하지 않기 때문입니다 . 인증서가 의심 스럽다는 의미는 아니지만 OS의 CA 목록에없는 기관 / 회사에서 자체 서명하거나 서명 할 수 있습니다. 컴퓨터 에서 문제를 피하기 위해해야 ​​할 일은 인증서를 의심 할 이유가없는 경우 해당 인증서를 신뢰하도록하는 것입니다.

gitLab 서버에 사용되는 웹 인증서를 확인하고에 추가하십시오 </git_installation_folder>/bin/curl-ca-bundle.crt.

인증서 확인 하지 않고 복제본이 작동하는지 확인하려면 다음을 설정하십시오.

export GIT_SSL_NO_VERIFY=1
#or
git config --global http.sslverify false

그러나 " 브라우저는 브라우저, wget 및 curl에서 작동하지만 git에서는 실패합니다 "또는이 블로그 게시물에 설명 된대로 테스트 전용 입니다.

문제 4272 에서 GitLab 설정을 확인하십시오 .


해당 인증서를 얻으려면 ( curl-ca-bundle.crt파일 에 추가해야 함 ) a를 입력하십시오.

echo -n | openssl s_client -showcerts -connect yourserver.com:YourHttpsGitlabPort \
  2>/dev/null  | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'

( ' yourserver.com'는 GitLab 서버 이름 YourHttpsGitlabPort이며 일반적으로 https 포트입니다. 443)

CA (Certificate Authority 발행자)를 확인하려면 다음을 입력하십시오.

echo -n | openssl s_client -showcerts -connect yourserver.com:YourHttpsGilabPort \
  2>/dev/null  | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' \
  | openssl x509 -noout -text | grep "CA Issuers" | head -1

참고 : Valeriy Katkov주석-servername 에서 openssl 명령 에 옵션 을 추가 할 것을 제안 합니다. 그렇지 않으면 Valeriy의 경우 www.github.com에 대한 인증서가 표시되지 않습니다.

openssl s_client -showcerts -servername www.github.com -connect www.github.com:443

Findekano주석에 다음을 추가합니다 .

의 위치를 ​​식별하기 curl-ca-bundle.crt위해 다음 명령을 사용할 수 있습니다

curl-config --ca

또한 내 최근 답변 " github : server certificate verify failed "를 참조하십시오. 해당 인증서를 거부해야 할 수도 있습니다.

sudo apt-get install --reinstall ca-certificates
sudo mkdir /usr/local/share/ca-certificates/cacert.org
sudo wget -P /usr/local/share/ca-certificates/cacert.org http://www.cacert.org/certs/root.crt http://www.cacert.org/certs/class3.crt
sudo update-ca-certificates
git config --global http.sslCAinfo /etc/ssl/certs/ca-certificates.crt

8
원본 메시지에 인증서를 추가 할 위치가 표시되지 않습니까? 제 경우에는을 curl-config --ca반환했습니다 /etc/ssl/certs/ca-certificates.crt. 이곳에서 인증서를 추가해야했습니다. 그 외에도이 답변은이 문제에 대해 올바른 방향을 제시하는 첫 번째 정보였습니다.
uli_1973

1
git install 폴더는 어떻게 찾습니까?
Bhargav

1
@Bhargav 그것은 운영 체제에 따라 다릅니다. Linux에서는을 수행 할 수 있습니다 which git.
VonC

3
나는 달렸 curl-config --ca지만 아무것도 반환되지 않았다.
페르난도 코스타

1
팁 주셔서 감사합니다-당신은 내 하루를 저장했습니다.
Janne

220

참고 : 이것은 보안에 중요한 영향을 미칩니다.

터미널을 열고 다음 명령을 실행하십시오.

export GIT_SSL_NO_VERIFY=1

그것은 나를 위해 작동하며 Linux 시스템을 사용하고 있습니다.


60
자신이하는 일을 알고있을 때 해결 방법이므로 다운 보팅하지 않습니다. 그러나 일반적인 경우에는이를 권장하지 않습니다.
tripleee 2012 년

9
나는 당신이 무엇을하고 있는지 알 때 그 해결 방법을 말하지 않을 것입니다. 당신이 무엇을하고 있는지 알면 "누군가 우리를 해킹했다는 보안이 잘 안된다"고하지 말고 "누군가가 우리를 해킹했을 수도있다"는 인증서를보아야한다. 무언가가 최대한 빨리 밀려 나야한다면 그것은 스톱 갭 측정이다.
srcspider

1
위의 플래그를 내 보내면 오류가 발생합니다. 오류 : RPC 실패; 결과 = 22, HTTP 코드 = 403 치명적 : 원격 끝이 예기치 않게 중단되었습니다. 오류 : RPC에 실패했습니다. 결과 = 22, HTTP 코드 = 403 치명적 : 원격 끝이 예기치 않게 끊어졌습니다
Desu

7
나와 함께 일한git config --global http.sslverify false
Dinei

2
큰. 당신은 내 시간을 절약했습니다.
Sai prateek

146

이 문제의 또 다른 원인은 시계가 꺼져있을 수 있습니다. 인증서는 시간에 민감합니다.

현재 시스템 시간을 확인하려면

date -R

NTP 를 설치 하여 전역 NTP 풀 의 신뢰할 수있는 인터넷 시간 서버와 시스템 시간을 자동으로 동기화 할 수 있습니다 . 예를 들어, 데비안 / 우분투에 설치하려면 :

apt-get install ntp

5
이것은 내 문제였다. 대학에서 ntp 패킷을 차단하여 시스템 업데이트 시간을 방해했습니다. 일단 대학 ntp 서버를 구성하면 일이 다시 작동했습니다. 이 팁에 감사드립니다!
Kyle

3
이것은 또한 내 문제의 원인이었습니다. 날짜가 잘못된 내장 장치를 사용하고있었습니다!
Shervin Emami

이것은 인증서와 함께 내 문제였습니다. 서버 시계가 미래로 향하고 있다는 것을 발견하기 전에 모든 종류의 솔루션을 조사하는 데 몇 시간을 보냈습니다. 그러나 Node.js의 향후 릴리스를 얻는 데 도움이되지 않았습니다. :-(
Kevin Teljeur

1
@Katu 당연하지 git, 그것은 기본 SSL 교환입니다. Git은 SSL 지원으로 구축되었습니다.
Yvan

1
나는 이것을 10000 번 공언했습니다 .... 지금 6 시간 동안 작동하지 않는 이유를 찾고있었습니다.
dGo

66

개인 네트워크 내에서 git 서버를 사용하고 자체 서명 된 인증서 또는 IP 주소를 통한 인증서를 사용하는 경우 git global config를 사용하여 SSL 검사를 비활성화 할 수도 있습니다.

git config --global http.sslverify "false"

43

같은 문제가 있었다. 자체 발급 인증 기관으로 인해 발생합니다. .pem 파일을 / usr / local / share / ca-certificates /에 추가 하고 호출하여 해결

sudo update-ca-certificates

추신 : 폴더 ./share/ca-certificates의 pem 파일은 반드시 확장자가 .crt입니다.


2
리눅스 민트 16에서 매력처럼 작동했습니다 :)
greuze

cert.pem 또는 cert.crt 또는 cert.pem.crt을 의미합니까?
Moses Liao GZ 2012

1
cert.pem은 cert.pem.crt로 변경해야한다
니콜라이 루반에게

34

시스템 시계를 확인하십시오.

$ date

올바르지 않으면 인증서 확인이 실패합니다. 시스템 시계를 수정하려면

$ apt-get install ntp

시계 자체가 동기화되어야합니다.

마지막으로 복제 명령을 다시 입력하십시오.


1
예! VirtualBox에 오랫동안 Ubuntu 인스턴스가 일시 중단되었습니다. 일시 중지하지 않았을 때 어떤 이유로 시스템 시계가 동기화되지 않았습니다. VonC의 대답은 지식이있는 것처럼 보이지만 이해하지 못하는 보안 명령을 많이 실행할 필요가 없다는 것이 정말로 기쁩니다. 이것을 먼저 확인하십시오!
AndyJost

24
GIT_CURL_VERBOSE=1 git [clone|fetch]…

문제가 어디에 있는지 알려줘야합니다. NSS에 내장 할 때 컬로 인해 NSS에 해당되는 지원하지 주류 (에, PEM 인증서를 지원하지 않는 때문에 내 경우에는 그것이 있었다 # 726116 # 804215 # 402712 ).


4
와 좋은 추가 GIT_CURL_VERBOSE. 나는 내 대답에 언급하지 않았다. +1
VonC

18

또는이 주석을 실행하여 서버 인증서를 데이터베이스에 추가하십시오.

echo $(echo -n | openssl s_client -showcerts -connect yourserver.com:YourHttpGilabPort 2>/dev/null  | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p') >> /etc/ssl/certs/ca-certificates.crt

그런 다음 git clone을 다시 수행하십시오.


1
이것이 누구에게나 효과가 있는지는 모르지만 인증서 파일을 루트로 추가하려면 "tee"가 필요합니다. echo -n | openssl s_client -showcerts -connect yourserver.com:443 2> / dev / null | sed -ne '/ -BEGIN CERTIFICATE-/, /-END CERTIFICATE- / p'| sudo 티 -a /etc/ssl/certs/ca-certificates.crt
ywu

필자의 경우 서버에 유효한 인증서가 있지만 데이터베이스에 인증서가 포함되어 있지 않습니다.이 명령으로 해결했지만이 명령을 루트 권한으로 실행해야한다고 말해야합니다.
hermeslm

10

goagent 프록시를 설정하는 동안 CA 파일을 엉망으로 만들었습니다. github에서 데이터를 가져올 수 없으며 동일한 경고가 나타납니다.

서버 인증서 확인에 실패했습니다. CA 파일 : /etc/ssl/certs/ca-certificates.crt CRL 파일 : 없음

Vonc의 방법을 사용하여 github에서 인증서를 가져 와서 /etc/ssl/certs/ca-certificates.crt에 넣습니다. 문제가 해결되었습니다.

에코 -n | openssl s_client -showcerts -connect github.com:443 2> / dev / null | sed -ne '/ -BEGIN CERTIFICATE-/, /-END CERTIFICATE- / p'


8

git ssl 검증을 false로 설정하지 않아도됩니다. 시스템에 모든 CA 권한 인증서가없는 경우 발생합니다. 대부분 SSL 인증서가있는 사용자는 중간 인증서가 누락되었습니다.

중간 인증서 (CA 누락 및 중간 인증서의 전체 체인)의 전체 텍스트를 추가하기 만하면됩니다.

sudo gedit /etc/ssl/certs/ca-certificates.crt 

을 실행하지 않고 작동합니다 update-ca-certificates.

수동으로 생성 된 인증서도 마찬가지입니다. CA 인증서 텍스트 만 추가하면됩니다.

마지막에 : 성공 성공 : 모든 것이 최신입니다


1
서버가 모든 SSL CA 체인으로 올바르게 구성되지 않은 경우에도 마찬가지입니다.
abcdef12

abcdef12가 언급했듯이 체인 문제가 원인 일 수 있습니다. git 1.9.1 에서이 문제가 발생했습니다-서버가 인증서 체인을 보내고 있습니다 : # 0 server cert; # 1 서버 인증서 (다시); # 2 서명자 증명서. 체인의 복제본은 git이 그것을 좋아하지 않는 이유였습니다.
jah

8

터미널 에서이 문제를 해결하기 위해 무엇을 했습니까 (Ubuntu 18.04) :

openssl s_client -showcerts -servername www.github.com -connect www.github.com:443

인증서 청크 두 덩어리가 있습니다. 그리고 인증서 청크를 내 인증서 파일에 복사했습니다 /etc/ssl/certs/ca-certificates.crt.


이 솔루션은 Ubuntu 16.04에서 동일한 문제를 해결합니다.
user3072843

인증서 청크 란 정확히 무엇을 의미 합니까? 블록 사이 ---BEGIN CERTIFICATE------ END CERTIFICATE ---?
B--rian

3

Xubuntu를 Raspberry pi 2에 설치했는데 NTP 및 Automatic Server 동기화가 꺼져 있거나 설치되지 않았을 때와 동일한 문제가 발견되었습니다. NTP 받기

sudo apt-get install ntp

"시간 및 날짜"를 "수동"에서 "인터넷 서버와 동기화 유지"로 변경하십시오.


1

결국 http.sslverify를 .git / config에 추가하십시오.

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = https://server/user/project.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[http]
        sslVerify = false

1
명령 줄을 사용하는 것이 좋습니다 git config http.sslVerify false. @ romain-vdk에서 제안한 것처럼 전역이 아닌 저장소별로 Git 구성 편집을 제안하고 있습니까?
ahogen

1

가장 먼저 확인해야 할 것은 /etc/ssland 의 파일 권한입니다 /etc/ssl/certs.

인증 기관 관리 도구 에서 작업하는 동안 그룹 이름 / ID를 rm -rf /etc/ssl/*사용할 때 파일 권한을 삭제하거나 SSL 디렉토리 를 삭제하는 실수가 있었습니다.ssl-cert

내가가 동일한 오류 메시지가 나타났습니다라는 것이었다 wgetcurlCLI 브라우저 도구 :

server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

/etc/ssland /etc/ssl/cert디렉토리의 파일 권한을 가져 오면 o+rx-wCLI 브라우저 도구가 약간 쉬워지기 시작했습니다.

mkdir -p /etc/ssl/certs
chmod u+rwx,go+rx /etc/ssl /etc/ssl/certs

또한 Java 하위 디렉토리를 다시 작성하고 Trusted CA 인증서 디렉토리를 재구성해야했습니다.

mkdir /etc/ssl/certs/java
chmod u+rwx,go+rx /etc/ssl/certs/java
update-ca-certificates

그리고 해안은 깨끗했다.


0

나는 항상 나를 위해 작동하는 자식 저장소와 같은 문제가 발생했다. 문제는 공개 WiFi 액세스를 통해 액세스했는데 첫 번째 연결 (예를 들어 광고를 표시하고 tos에 동의 할 때)을 포로 포털로 리디렉션하는 것입니다.


0

인증서와 번들을 하나의 .crt 파일로 복사하고 파일의 인증서 사이에 빈 줄이 있는지 확인하십시오.

이것은 인터넷에서 모든 것을 시도한 후 GitLab 서버에서 저에게 효과적이었습니다.

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