답변:
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
의 위치를 식별하기
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
which git
.
curl-config --ca
지만 아무것도 반환되지 않았다.
참고 : 이것은 보안에 중요한 영향을 미칩니다.
터미널을 열고 다음 명령을 실행하십시오.
export GIT_SSL_NO_VERIFY=1
그것은 나를 위해 작동하며 Linux 시스템을 사용하고 있습니다.
git config --global http.sslverify false
이 문제의 또 다른 원인은 시계가 꺼져있을 수 있습니다. 인증서는 시간에 민감합니다.
현재 시스템 시간을 확인하려면
date -R
NTP 를 설치 하여 전역 NTP 풀 의 신뢰할 수있는 인터넷 시간 서버와 시스템 시간을 자동으로 동기화 할 수 있습니다 . 예를 들어, 데비안 / 우분투에 설치하려면 :
apt-get install ntp
git
, 그것은 기본 SSL 교환입니다. Git은 SSL 지원으로 구축되었습니다.
같은 문제가 있었다. 자체 발급 인증 기관으로 인해 발생합니다. .pem 파일을 / usr / local / share / ca-certificates /에 추가 하고 호출하여 해결
sudo update-ca-certificates
추신 : 폴더 ./share/ca-certificates의 pem 파일은 반드시 확장자가 .crt입니다.
시스템 시계를 확인하십시오.
$ date
올바르지 않으면 인증서 확인이 실패합니다. 시스템 시계를 수정하려면
$ apt-get install ntp
시계 자체가 동기화되어야합니다.
마지막으로 복제 명령을 다시 입력하십시오.
또는이 주석을 실행하여 서버 인증서를 데이터베이스에 추가하십시오.
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을 다시 수행하십시오.
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'
git ssl 검증을 false로 설정하지 않아도됩니다. 시스템에 모든 CA 권한 인증서가없는 경우 발생합니다. 대부분 SSL 인증서가있는 사용자는 중간 인증서가 누락되었습니다.
중간 인증서 (CA 누락 및 중간 인증서의 전체 체인)의 전체 텍스트를 추가하기 만하면됩니다.
sudo gedit /etc/ssl/certs/ca-certificates.crt
을 실행하지 않고 작동합니다 update-ca-certificates
.
수동으로 생성 된 인증서도 마찬가지입니다. CA 인증서 텍스트 만 추가하면됩니다.
마지막에 : 성공 성공 : 모든 것이 최신입니다
터미널 에서이 문제를 해결하기 위해 무엇을 했습니까 (Ubuntu 18.04) :
openssl s_client -showcerts -servername www.github.com -connect www.github.com:443
인증서 청크 두 덩어리가 있습니다. 그리고 인증서 청크를 내 인증서 파일에 복사했습니다 /etc/ssl/certs/ca-certificates.crt
.
---BEGIN CERTIFICATE---
및 --- END CERTIFICATE ---
?
Xubuntu를 Raspberry pi 2에 설치했는데 NTP 및 Automatic Server 동기화가 꺼져 있거나 설치되지 않았을 때와 동일한 문제가 발견되었습니다. NTP 받기
sudo apt-get install ntp
"시간 및 날짜"를 "수동"에서 "인터넷 서버와 동기화 유지"로 변경하십시오.
결국 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
git config http.sslVerify false
. @ romain-vdk에서 제안한 것처럼 전역이 아닌 저장소별로 Git 구성 편집을 제안하고 있습니까?
가장 먼저 확인해야 할 것은 /etc/ssl
and 의 파일 권한입니다 /etc/ssl/certs
.
인증 기관 관리 도구 에서 작업하는 동안 그룹 이름 / ID를 rm -rf /etc/ssl/*
사용할 때 파일 권한을 삭제하거나 SSL 디렉토리 를 삭제하는 실수가 있었습니다.ssl-cert
내가가 동일한 오류 메시지가 나타났습니다라는 것이었다 wget
및 curl
CLI 브라우저 도구 :
server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
/etc/ssl
and /etc/ssl/cert
디렉토리의 파일 권한을 가져 오면 o+rx-w
CLI 브라우저 도구가 약간 쉬워지기 시작했습니다.
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
그리고 해안은 깨끗했다.
curl-config --ca
반환했습니다/etc/ssl/certs/ca-certificates.crt
. 이곳에서 인증서를 추가해야했습니다. 그 외에도이 답변은이 문제에 대해 올바른 방향을 제시하는 첫 번째 정보였습니다.