xác minh chứng chỉ máy chủ không thành công. CAfile: /etc/ssl/certs/ca-certert.crt CRLfile: none


333

Tôi có thể đẩy dự án nhân bản bằng ssh, nhưng nó không hoạt động khi tôi sao chép dự án bằng https.

Thông báo lỗi hiển thị cho tôi là:

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

Câu trả lời:


421

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"

Câu trả lời dài

Lý do cơ bản là máy tính của bạn không tin tưởng cơ quan cấp chứng chỉ đã ký chứng chỉ được sử dụng trên máy chủ Gitlab . Điều này không có nghĩa là chứng chỉ đáng ngờ, nhưng nó có thể tự ký hoặc ký bởi một tổ chức / công ty không có trong danh sách các CA của hệ điều hành của bạn. Những gì bạn phải làm để khắc phục sự cố trên máy tính của mình là bảo nó tin tưởng vào chứng chỉ đó - nếu bạn không có bất kỳ lý do nào để nghi ngờ về vấn đề đó.

Bạn cần kiểm tra chứng chỉ web được sử dụng cho máy chủ gitLab của bạn và thêm nó vào </git_installation_folder>/bin/curl-ca-bundle.crt.

Để kiểm tra xem ít nhất bản sao có hoạt động mà không kiểm tra chứng chỉ đã nói hay không, bạn có thể đặt:

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

Nhưng điều đó chỉ dành cho thử nghiệm, như được minh họa trong " SSL hoạt động với trình duyệt, wget và curl, nhưng không thành công với git ", hoặc trong bài đăng trên blog này .

Kiểm tra cài đặt GitLab của bạn, một vấn đề trong 4272 .


Để có được chứng chỉ đó (bạn cần thêm vào curl-ca-bundle.crttệp của mình ), hãy nhập a:

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

(với ' yourserver.com' là tên máy chủ GitLab của bạn và thường YourHttpsGitlabPortlà cổng https 443)

Để kiểm tra CA (tổ chức phát hành chứng chỉ), nhập a:

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

Lưu ý: Valeriy Katkov đề xuất trong các nhận xét để thêm -servernametùy chọn cho lệnh openssl, nếu không lệnh sẽ không hiển thị chứng chỉ cho www.github.com trong trường hợp của Valeriy.

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

Findekano thêm vào trong các ý kiến :

để xác định vị trí của curl-ca-bundle.crt, bạn có thể sử dụng lệnh

curl-config --ca

Ngoài ra, hãy xem câu trả lời gần đây hơn của tôi " github: xác minh chứng chỉ máy chủ không thành công ": bạn có thể phải đặt lại các chứng chỉ đó:

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
Không phải thông điệp ban đầu cho biết nơi để thêm chứng chỉ vào? Trong trường hợp của tôi được curl-config --catrả lại /etc/ssl/certs/ca-certificates.crt, đó là nơi tôi phải thêm chứng chỉ. Ngoài ra, câu trả lời này là thông tin đầu tiên chỉ cho tôi đi đúng hướng với vấn đề này
uli_1973

1
Làm thế nào để bạn tìm thấy thư mục cài đặt git?
Bhargav

1
@Bhargav nó phụ thuộc vào hệ điều hành của bạn. Trên Linux, bạn có thể làm một which git.
VonC

3
Tôi chạy curl-config --ca, nhưng không có gì được trả lại.
Fernando Costa

1
Cảm ơn vì tiền boa - bạn đã cứu ngày của tôi.
Janne

218

Lưu ý: Điều này có ý nghĩa bảo mật lớn .

Mở terminal của bạn và chạy lệnh sau:

export GIT_SSL_NO_VERIFY=1

Nó hoạt động cho tôi và tôi đang sử dụng hệ thống Linux.


60
Không bỏ qua vì đó là cách giải quyết khi bạn biết bạn đang làm gì. Tuy nhiên, mạnh mẽ đề nghị chống lại điều này trong trường hợp chung.
tripleee

9
Tôi sẽ không nói đó là cách giải quyết khi bạn biết bạn đang làm gì. Khi bạn biết những gì bạn đang làm, bạn nên xem một chứng chỉ không thành công vì "có thể ai đó đã hack chúng tôi" chứ không phải "ồ bảo mật nói ai đó đã hack chúng tôi, đoán chúng tôi cần phải vô hiệu hóa bảo mật." Tốt nhất là một biện pháp ngăn chặn nếu có thứ gì đó cần được đẩy càng sớm càng tốt.
srcspider

1
bằng cách xuất cờ trên tôi nhận được lỗi bên dưới.error: RPC không thành công; result = 22, mã HTTP = 403 gây tử vong: Đầu từ xa bị treo lỗi không mong muốn: RPC không thành công; result = 22, mã HTTP = 403 gây tử vong: Đầu từ xa bị treo bất ngờ
Desu

7
Chỉ làm việc cho tôi vớigit config --global http.sslverify false
Dinei

2
Tuyệt quá. Bạn đã tiết kiệm thời gian của tôi.
Sai prateek

146

Một nguyên nhân khác của vấn đề này có thể là đồng hồ của bạn có thể bị tắt. Giấy chứng nhận là thời gian nhạy cảm.

Để kiểm tra thời gian hệ thống hiện tại:

date -R

Bạn có thể xem xét việc cài đặt NTP để tự động đồng bộ hóa thời gian hệ thống với bộ đếm thời gian internet đáng tin cậy từ nhóm NTP toàn cầu . Ví dụ: để cài đặt trên Debian / Ubuntu:

apt-get install ntp

5
Đây là vấn đề của tôi. Trường đại học của tôi đã chặn các gói ntp, điều này ngăn hệ thống của tôi cập nhật thời gian. Khi tôi cấu hình máy chủ ntp của trường đại học, mọi thứ sẽ hoạt động trở lại. Cảm ơn vì mẹo này!
Kyle

3
Đây cũng là nguyên nhân của vấn đề của tôi, tôi đã sử dụng một thiết bị nhúng có ngày sai!
Shervin Emami

Đây là vấn đề của tôi, với certs. Tôi đã dành hàng giờ để xem xét tất cả các loại giải pháp trước khi phát hiện ra rằng vấn đề là đồng hồ máy chủ được đặt trong tương lai. Tuy nhiên, điều đó không giúp tôi có được bản phát hành Node.js trong tương lai. :-(
Kevin Teljeur

1
@Katu không phải gitnói, đó là trao đổi SSL cơ bản. Git được xây dựng với sự hỗ trợ SSL.
Yvan

1
Tôi đã nâng cấp 10000 lần này .... đã tìm kiếm lý do tại sao nó không hoạt động trong 6 giờ liền ... Máy chủ đã tắt chưa đầy 7 phút và điều này đã tạo nên mánh khóe ... CẢM ƠN!
dGo

66

Nếu bạn đang sử dụng máy chủ git bên trong mạng riêng và đang sử dụng chứng chỉ tự ký hoặc chứng chỉ qua địa chỉ IP; bạn cũng có thể chỉ cần sử dụng cấu hình toàn cầu git để vô hiệu hóa kiểm tra ssl:

git config --global http.sslverify "false"

43

Có vấn đề tương tự. Nguyên nhân do cơ quan cấp giấy chứng nhận tự cấp. Đã giải quyết nó bằng cách thêm tệp .pem vào / usr / local / share / ca-cert / và gọi

sudo update-ca-certificates

PS: tệp pem trong thư mục ./share/ca-certert PHẢI có phần mở rộng .crt


2
Làm việc như một bùa mê trong linux mint 16 :)
greuze

bạn có nghĩa là cert.pem hoặc cert.crt hoặc cert.pem.crt?
Moses Liao GZ

1
cert.pem nên được đổi tên thành cert.pem.crt
Nikolay Ruban

34

Kiểm tra đồng hồ hệ thống của bạn,

$ date

Nếu nó không đúng, kiểm tra chứng chỉ sẽ thất bại. Để sửa đồng hồ hệ thống,

$ apt-get install ntp

Đồng hồ nên tự đồng bộ hóa.

Cuối cùng nhập lệnh clone một lần nữa.


1
Đúng! Tôi đã có một phiên bản Ubuntu bị treo trong VirtualBox trong một thời gian dài. Đồng hồ hệ thống không đồng bộ hóa vì bất kỳ lý do gì khi tôi không mong đợi. Câu trả lời của VonC có vẻ am hiểu, nhưng tôi thực sự rất vui vì tôi đã không phải chạy một loạt các lệnh bảo mật mà tôi không hiểu. Kiểm tra cái này trước!
AndyJost

24
GIT_CURL_VERBOSE=1 git [clone|fetch]…

nên cho bạn biết vấn đề ở đâu Trong trường hợp của tôi đó là do cURL không hỗ trợ chứng chỉ PEM khi xây dựng chống NSS, do đó hỗ trợ không phải là đường chính trong NSS ( # 726.116 # 804.215 # 402.712 hơn ).


4
Bổ sung tốt đẹp với GIT_CURL_VERBOSE. Tôi đã không đề cập đến nó trong câu trả lời của tôi. +1
VonC

18

Hoặc chỉ cần chạy bình luận này để thêm Chứng chỉ máy chủ vào cơ sở dữ liệu của bạn:

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

Sau đó làm git clone một lần nữa.


1
Tôi không biết điều này có hiệu quả với bất kỳ ai không nhưng tôi cần "tee" để nối thêm tệp cert dưới dạng root: echo -n | openssl s_client -showcerts -connect của bạn máy chủ.com: 443 2> / dev / null | GIẤY CHỨNG NHẬN sed -ne '/ -BEGIN - /, / - KẾT THÚC KẾT THÚC- / p' | sudo tee -a /etc/ssl/certs/ca-certert.crt
ywu

Trong trường hợp của tôi, máy chủ có chứng chỉ hợp lệ, nhưng cơ sở dữ liệu của tôi không bao gồm nó, với lệnh này tôi đã giải quyết nhưng tôi phải nói rằng lệnh này phải được chạy với quyền root.
ẩn sĩ

10

Tôi đã làm hỏng các tập tin CA của mình trong khi tôi thiết lập proxy vô dụng. Không thể lấy dữ liệu từ github và nhận được cảnh báo tương tự:

xác minh chứng chỉ máy chủ không thành công. CAfile: /etc/ssl/certs/ca-certert.crt CRLfile: none

sử dụng phương pháp của Vonc, lấy chứng chỉ từ github và đặt nó vào /etc/ssl/certs/ca-certert.crt, vấn đề đã được giải quyết.

tiếng vang -n | openssl s_client -showcerts -connect github.com:443 2> / dev / null | sed -ne '/ -BEGIN CHỨNG NHẬN - /, / - GIẤY CHỨNG NHẬN KẾT THÚC- / p'


8

không cần thiết phải xác minh git ssl để đặt thành false. Nó được gây ra khi hệ thống không có tất cả các chứng chỉ ủy quyền CA. Hầu hết những người có chứng chỉ SSL chính hãng đều thiếu chứng chỉ trung gian.

Chỉ cần thêm văn bản đầy đủ của chứng chỉ trung gian (toàn bộ chuỗi CA bị thiếu và chứng chỉ trung gian) vào

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

hoạt động mà không chạy update-ca-certificates.

Tương tự với các chứng chỉ được tạo thủ công, chỉ cần thêm văn bản chứng chỉ CA.

Cuối cùng: Đẩy thành công: Mọi thứ đều cập nhật


1
Điều tương tự có thể được gây ra nếu máy chủ không được cấu hình đúng với tất cả chuỗi SSL CA.
abcdef12

Các vấn đề về chuỗi có thể là nguyên nhân, như abcdef12 đã nhận xét. Tôi gặp vấn đề này với git 1.9.1 - máy chủ đang gửi chuỗi cert: # 0 server cert; Chứng chỉ máy chủ số 1 (một lần nữa); Chứng nhận người ký số 2. Sự trùng lặp trong chuỗi là lý do git không thích nó.
jah

8

Những gì tôi đã làm để giải quyết vấn đề này trong thiết bị đầu cuối (Ubuntu 18.04):

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

Tôi có hai khối giấy chứng nhận. Và tôi đã sao chép các khối chứng chỉ vào tập tin chứng chỉ của mình /etc/ssl/certs/ca-certificates.crt.


Giải pháp này giải quyết vấn đề giống hệt của tôi trong Ubuntu 16.04.
dùng3072843

Chính xác thì bạn có ý nghĩa gì với chunk certificat ? Khối giữa ---BEGIN CERTIFICATE------ END CERTIFICATE ---?
B - rian

3

Tôi đã cài đặt Xubfox trên Raspberry pi 2, thấy vấn đề tương tự với thời gian, vì đồng bộ hóa NTP và Máy chủ tự động bị tắt (hoặc không được cài đặt). Nhận NTP

sudo apt-get install ntp

và thay đổi "Thời gian và ngày" từ "Thủ công" thành "Giữ đồng bộ hóa với máy chủ Internet"


1

Cuối cùng, thêm http.sslverify vào .git / config của bạn.

[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
Tốt hơn để sử dụng dòng lệnh git config http.sslVerify false. Bạn có đề xuất chỉnh sửa cấu hình Git trên cơ sở từng kho lưu trữ, không phải trên toàn cầu như đề xuất của @ romain-vdk?
ahogen

1

Điều đầu tiên bạn nên kiểm tra là sự cho phép của tập tin /etc/ssl/etc/ssl/certs.

Tôi đã phạm sai lầm khi bỏ quyền truy cập tệp (hoặc thổi bay các rm -rf /etc/ssl/*thư mục SSL ) khi sử dụng ssl-certtên nhóm / ID trong khi làm việc trên Công cụ quản lý ủy quyền chứng chỉ của tôi .

Đó cũng là lúc tôi nhận được thông báo lỗi tương tự chính xác cho wgetcurlcông cụ trình duyệt CLI:

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

Khi tôi mang quyền truy cập tệp /etc/ssl/etc/ssl/certthư mục lên o+rx-w, các công cụ trình duyệt CLI đó bắt đầu dễ thở hơn một chút:

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

Tôi cũng phải tạo lại thư mục con Java và xây dựng lại các thư mục chứng chỉ CA đáng tin cậy:

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

và bờ biển đã rõ ràng.


0

Tôi chỉ gặp phải vấn đề tương tự với kho git luôn hoạt động với tôi. Vấn đề là tôi đã truy cập nó thông qua truy cập WiFi công cộng, nó chuyển hướng đến một cổng bị khóa theo kết nối đầu tiên (ví dụ để hiển thị quảng cáo và đồng ý với các tos).


0

Có chứng chỉ và gói được sao chép trong một tệp .crt và đảm bảo rằng có một dòng trống giữa các chứng chỉ trong tệp.

Điều này làm việc cho tôi trên máy chủ GitLab sau khi thử mọi thứ trên Internet.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.