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"
Jawaban panjang
Alasan dasarnya adalah bahwa komputer Anda tidak mempercayai otoritas sertifikat yang menandatangani sertifikat yang digunakan di server Gitlab . Ini tidak berarti sertifikat mencurigakan, tetapi dapat ditandatangani sendiri atau ditandatangani oleh lembaga / perusahaan yang tidak ada dalam daftar CA OS Anda. Apa yang harus Anda lakukan untuk menghindari masalah di komputer adalah mengatakannya untuk memercayai sertifikat itu - jika Anda tidak punya alasan untuk curiga tentang hal itu.
Anda perlu memeriksa sertifikat web yang digunakan untuk server gitLab Anda, dan menambahkannya ke </git_installation_folder>/bin/curl-ca-bundle.crt
.
Untuk memeriksa apakah setidaknya klon bekerja tanpa memeriksa sertifikat tersebut, Anda dapat mengatur:
export GIT_SSL_NO_VERIFY=1
#or
git config --global http.sslverify false
Tapi itu hanya untuk pengujian, seperti yang diilustrasikan dalam " SSL berfungsi dengan browser, wget, dan curl, tetapi gagal dengan git ", atau dalam posting blog ini .
Periksa pengaturan GitLab Anda, dalam edisi 4272 .
Untuk mendapatkan sertifikat itu (yang perlu Anda tambahkan ke curl-ca-bundle.crt
file Anda ), ketikkan:
echo -n | openssl s_client -showcerts -connect yourserver.com:YourHttpsGitlabPort \
2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
(dengan ' yourserver.com
menjadi nama server GitLab Anda, dan biasanya YourHttpsGitlabPort
adalah port https 443
)
Untuk memeriksa CA (penerbit Otoritas Sertifikat), ketik 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
Catatan: Valeriy Katkov menyarankan dalam komentar untuk menambahkan -servername
opsi ke perintah openssl, jika tidak, perintah tersebut tidak menunjukkan sertifikat untuk www.github.com dalam kasus Valeriy.
openssl s_client -showcerts -servername www.github.com -connect www.github.com:443
Findekano menambahkan dalam komentar :
untuk mengidentifikasi lokasi curl-ca-bundle.crt
, Anda dapat menggunakan perintah
curl-config --ca
Juga, lihat jawaban saya yang lebih baru " github: verifikasi sertifikat server gagal ": Anda mungkin harus memperbarui semua sertifikat itu:
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
curl-config --ca
dikembalikan/etc/ssl/certs/ca-certificates.crt
, di situlah saya harus menambahkan sertifikat. Terlepas dari itu, jawaban ini adalah informasi pertama yang menunjukkan saya ke arah yang benar dengan masalah iniwhich git
.curl-config --ca
, tetapi tidak ada yang dikembalikan.Buka terminal Anda dan jalankan perintah berikut:
Ini bekerja untuk saya dan saya menggunakan sistem Linux.
sumber
git config --global http.sslverify false
Penyebab lain dari masalah ini mungkin karena jam Anda mati. Sertifikat sensitif terhadap waktu.
Untuk memeriksa waktu sistem saat ini:
Anda dapat mempertimbangkan menginstal NTP untuk secara otomatis menyinkronkan waktu sistem dengan server waktu internet tepercaya dari kumpulan NTP global . Misalnya, untuk menginstal di Debian / Ubuntu:
sumber
git
per mengatakan, itu adalah pertukaran SSL yang mendasarinya. Git dibangun dengan dukungan SSL.Jika Anda menggunakan server git di dalam jaringan pribadi dan menggunakan sertifikat yang ditandatangani sendiri atau sertifikat di atas alamat IP; Anda juga dapat menggunakan git global config untuk menonaktifkan pemeriksaan ssl:
sumber
Punya masalah yang sama. Disebabkan oleh otoritas sertifikat yang diterbitkan sendiri. Mengatasinya dengan menambahkan file .pem ke / usr / local / share / ca-sertifikat / dan menelepon
PS: file pem dalam folder ./share/ca-certificates HARUS memiliki ekstensi .crt
sumber
Periksa jam sistem Anda,
$ date
Jika tidak benar, cek sertifikat akan gagal. Untuk memperbaiki jam sistem,
$ apt-get install ntp
Jam harus menyinkronkan dirinya sendiri.
Akhirnya masukkan perintah klon lagi.
sumber
harus memberi tahu Anda di mana masalahnya. Dalam kasus saya itu adalah karena CURL tidak mendukung sertifikat PEM ketika dibangun terhadap NSS, karena dukungan itu tidak menjadi arus utama di NSS ( # 726116 # 804215 # 402712 dan lebih banyak lagi ).
sumber
GIT_CURL_VERBOSE
. Saya tidak menyebutkannya dalam jawaban saya. +1Atau jalankan komentar ini untuk menambahkan Sertifikat server ke database Anda:
Lalu lakukan git klon lagi.
sumber
Saya mengacaukan file CA saya saat saya menyiapkan proxy goagent. Tidak dapat menarik data dari github, dan mendapatkan peringatan yang sama:
gunakan metode Vonc, dapatkan sertifikat dari github, dan masukkan ke /etc/ssl/certs/ca-certificates.crt, masalah terpecahkan.
sumber
tidak perlu mengatur verifikasi git ssl untuk disetel ke false. Ini disebabkan ketika sistem tidak memiliki semua sertifikat otoritas CA. Sebagian besar orang yang memiliki sertifikat SSL asli kehilangan sertifikat perantara.
Hanya menambahkan teks lengkap sertifikat perantara (seluruh rantai CA hilang dan sertifikat perantara) ke
bekerja tanpa menjalankan
update-ca-certificates
.Hal yang sama berlaku untuk sertifikat yang dibuat secara manual, cukup tambahkan teks sertifikat CA.
Pada akhirnya: Dorong berhasil: Semuanya mutakhir
sumber
Apa yang saya lakukan untuk mengatasi masalah ini di terminal (Ubuntu 18.04):
Saya mendapat dua bongkahan bongkahan sertifikat. Dan saya menyalin potongan sertifikat ke file sertifikat saya ke
/etc/ssl/certs/ca-certificates.crt
.sumber
---BEGIN CERTIFICATE---
dan--- END CERTIFICATE ---
?Saya menginstal Xubuntu pada Raspberry pi 2, menemukan masalah yang sama dengan waktu, karena sinkronisasi NTP dan Server Otomatis mati (atau tidak diinstal). Dapatkan NTP
dan ubah "Waktu dan Tanggal" dari "Manual" menjadi "Tetap disinkronkan dengan Server Internet"
sumber
Akhirnya, tambahkan http.sslverify ke .git / config Anda.
sumber
git config http.sslVerify false
. Apakah Anda menyarankan edit konfigurasi Git berdasarkan per-repositori, tidak secara global seperti yang disarankan oleh @ romain-vdk?Hal pertama yang harus Anda periksa adalah izin file dari
/etc/ssl
dan/etc/ssl/certs
.Saya melakukan kesalahan dengan menjatuhkan izin file (atau membuang
rm -rf /etc/ssl/*
direktori SSL ) ketika menggunakanssl-cert
nama grup / ID saat bekerja pada Alat Manajemen Otoritas Sertifikat saya .Saat itulah saya melihat pesan kesalahan yang sama persis untuk
wget
dancurl
alat browser CLI:Setelah saya membawa izin file
/etc/ssl
dan/etc/ssl/cert
direktori 'o+rx-w
, alat-alat browser CLI mulai bernafas sedikit lebih mudah:Saya juga harus membuat ulang subdirektori Java dan merekonstruksi direktori sertifikat CA Tepercaya:
dan pantainya jernih.
sumber
Saya baru saja mengalami masalah yang sama dengan repositori git yang selalu bekerja untuk saya. Masalahnya adalah saya mengaksesnya melalui akses WiFi publik, yang dialihkan ke portal captive pada koneksi pertama (misalnya untuk menampilkan iklan dan setuju dengan tos).
sumber
Apakah sertifikat dan bundel disalin dalam satu file .crt dan pastikan bahwa ada garis kosong antara sertifikat dalam file.
Ini bekerja untuk saya di server GitLab setelah mencoba semuanya di Internet.
sumber