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
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:
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.crt
tệ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 YourHttpsGitlabPort
là 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 -servername
tù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
which git
.
curl-config --ca
, nhưng không có gì được trả lại.
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.
git config --global http.sslverify false
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
git
nói, đó là trao đổi SSL cơ bản. Git được xây dựng với sự hỗ trợ SSL.
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"
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
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.
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 và hơn ).
GIT_CURL_VERBOSE
. Tôi đã không đề cập đến nó trong câu trả lời của tôi. +1
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.
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'
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
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
.
---BEGIN CERTIFICATE---
và --- END CERTIFICATE ---
?
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"
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
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?
Điều đầu tiên bạn nên kiểm tra là sự cho phép của tập tin /etc/ssl
và /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-cert
tê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 wget
và curl
cô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
và /etc/ssl/cert
thư 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.
curl-config --ca
trả 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