서버 인증서 확인에 실패했습니다. 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

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

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.