Tidak dapat menyelesaikan "tidak dapat memperoleh sertifikat penerbit lokal" menggunakan git pada Windows dengan sertifikat yang ditandatangani sendiri

283

Saya menggunakan Git di Windows. Saya menginstal paket msysGit. Repositori pengujian saya memiliki sertifikat yang ditandatangani sendiri di server. Saya dapat mengakses dan menggunakan repositori menggunakan HTTP tanpa masalah. Pindah ke HTTPS memberikan kesalahan:

Masalah Sertifikat SSL: tidak bisa mendapatkan sertifikat penerbit lokal.

Saya memiliki sertifikat yang ditandatangani sendiri yang diinstal di Otoritas Sertifikasi Root Tepercaya dari mesin klien Windows 7 saya. Saya bisa menjelajah ke URL repositori HTTPS di Internet Explorer tanpa pesan kesalahan.

Posting blog ini oleh Philip Kelley menjelaskan bahwa cURL tidak menggunakan toko sertifikat mesin klien. Saya mengikuti saran posting blog untuk membuat salinan pribadi curl-ca-bundle.crtdan mengkonfigurasi Git untuk menggunakannya. Saya yakin Git menggunakan salinan saya. Jika saya mengganti nama salinannya; Git mengeluh file tersebut hilang.

Saya menempelkan dalam sertifikat saya, seperti yang disebutkan dalam posting blog, saya masih mendapatkan pesan "tidak bisa mendapatkan sertifikat penerbit lokal".

Saya memverifikasi bahwa Git masih bekerja dengan mengkloning GitHub Repository melalui HTTPS.

Satu-satunya hal yang saya lihat berbeda dengan posting blog adalah sertifikat saya adalah root - tidak ada rantai untuk mencapainya. Sertifikat saya awalnya berasal dari mengklik tautan IIS8 IIS Manager 'Buat Sertifikat Mandiri'. Mungkin itu membuat sertifikat berbeda dengan apa yang diharapkan CURL.

Bagaimana saya bisa membuat Git / cURL menerima sertifikat yang ditandatangani sendiri?

RichardHowells
sumber
1
Juga periksa apakah jaringan lokal Anda diizinkan untuk mendorong file ke repositori github. Mungkin ada batasan firewall atau antivirus.
shasi kanth
Jika ada yang menghadapi kesalahan ini saat menggunakan Bower, buat file .bowerrc dengan konten { "strict-ssl": false }. Jangan berterima kasih padaku, terima kasih orang ini: stapp.space/fight-with-2 Saya telah berjuang dengan kesalahan ini selama hampir 5 jam, langsung !!
Ganesh Jadhav

Jawaban:

267

Buka Git Bash dan jalankan perintah jika Anda ingin menonaktifkan verifikasi SSL sepenuhnya.

git config --global http.sslVerify false

Catatan: Solusi ini dapat membuka Anda ke serangan seperti serangan man-in-the-middle . Karenanya aktifkan verifikasi lagi sesegera mungkin:

git config --global http.sslVerify true
Samir
sumber
70
Jawaban ini mengalahkan keamanan SSL dengan mengizinkan serangan man-in-the-middle. Jawaban lain sudah menjelaskan cara mengkonfigurasi git untuk mempercayai sertifikat spesifik yang Anda butuhkan.
dsh
12
jawaban yang mengerikan memang, Anda bahkan tidak memberitahu mereka untuk mengaktifkan kembali SSL. Inilah sebabnya mengapa kerentanan keamanan terjadi.
Edgar Aroutiounian
Jika Anda menggunakan Gitblit maka tidak ada pilihan lain selain melakukan sshVerify false.
Samir
24
Untuk menonaktifkan verifikasi TLS / SSL untuk satu perintah git, gunakan perintah berikut:git -c http.sslVerify=false clone https://domain.com/path/to/git
Maxim Suslov
1
Ada beberapa solusi yang sudah disediakan di bawah ini, dan saya sudah menyarankan kontra. Jadi terserah kepada Anda bahwa solusi apa yang Anda pilih untuk menyelesaikan masalah.
Samir
154

Masalahnya adalah bahwa git secara default menggunakan "Linux" crypto backend.

Dimulai dengan Git untuk Windows 2.14, sekarang Anda dapat mengonfigurasi Git untuk menggunakan SChannel, lapisan jaringan Windows bawaan sebagai backend crypto. Ini berarti Anda akan menggunakan mekanisme penyimpanan sertifikat Windows dan Anda tidak perlu mengkonfigurasi secara eksplisit mekanisme penyimpanan CA curl: https://msdn.microsoft.com/en-us/library/windows/desktop/aa380123(v= vs.85) .aspx

Eksekusi saja:

git config --global http.sslbackend schannel

Itu seharusnya membantu.

Menggunakan schannel sekarang adalah pengaturan standar ketika menginstal git untuk windows, juga dianjurkan untuk tidak memeriksa repositori oleh SSH dan jika memungkinkan, karena https lebih mudah untuk dikonfigurasikan dan kecil kemungkinannya untuk diblokir oleh firewall itu berarti lebih kecil kemungkinannya untuk gagal.

Ihor Zenich
sumber
1
Namun perlu dicatat bahwa solusi ini dapat membuat git config --global http.sslCAInfo <my-server-self-signed-cert.pem>gagal berfungsi. Saya mengkonfigurasi http.sslCAInfountuk menggunakan sertifikat yang ditandatangani sendiri untuk server saya, dan itulah alasannya (mungkin tidak sama dengan OP) sehingga saya menemui "Masalah Sertifikat SSL: tidak bisa mendapatkan sertifikat penerbit lokal" ketika saya melakukan mis git clone https://github.com/Microsoft/vscode.git. A. Akhirnya saya menggunakan jawaban dari stackoverflow.com/a/47196562/1323552 (Ben PP Tung) untuk menyetel konfigurasi sslCAInfo khusus saya ke server git saya untuk menyelesaikannya.
Johnny Wong
95

Saya punya masalah ini juga. Dalam kasus saya, saya mencoba untuk mendapatkan kait Git pasca-terima untuk memperbarui salinan yang berfungsi pada server dengan setiap dorongan. Mencoba mengikuti instruksi di blog yang Anda tautkan. Tidak bekerja untuk saya juga dan mengesampingkan pengaturan pada basis per pengguna tampaknya tidak berfungsi baik.

Yang akhirnya harus saya lakukan adalah menonaktifkan verifikasi SSL (seperti yang disebutkan dalam artikel) untuk Git secara keseluruhan. Bukan solusi yang sempurna, tetapi itu akan berhasil sampai saya dapat menemukan yang lebih baik.

Saya mengedit file teks konfigurasi Git (dengan aplikasi netral akhir baris favorit saya seperti Notepad ++) yang terletak di:

C: \ Program Files (x86) \ Git \ etc \ gitconfig

Di blok [http], saya menambahkan opsi untuk menonaktifkan sslVerify. Itu terlihat seperti ini ketika saya selesai:

[http]
    sslVerify = false
    sslCAinfo = /bin/curl-ca-bundle.crt

Itu berhasil.

CATATAN:

  • Ini menonaktifkan verifikasi SSL dan tidak direkomendasikan sebagai solusi jangka panjang.

  • Anda dapat menonaktifkan ini per-repositori yang masih tidak bagus, tetapi melokalisasi pengaturan.

  • Dengan munculnya LetsEncrypt.org, sekarang cukup sederhana, otomatis dan bebas untuk mengatur SSL sebagai alternatif untuk sertifikat yang ditandatangani sendiri dan meniadakan kebutuhan untuk mematikan sslVerify.

Nakailey
sumber
145
Ini mengalahkan tujuan SSL.
syaz
49
Anda dapat menggunakan perintah "git config --global http.sslVerify false" untuk menonaktifkan verifikasi SSL
CleanCoder
6
Terima kasih telah menunjukkan sslCAinfoentri konfigurasi; tapi saya tidak memilih jawaban karena tidak masuk akal untuk menonaktifkan SSL secara permanen untuk seluruh sistem git (sudahkah Anda mencoba untuk menonaktifkannya di seluruh sistem, kemudian mengkloning, kemudian mengaktifkan kembali dan kemudian menonaktifkannya di konfigurasi git lokal untuk repo yang baru dikloning?).
7heo.tk
35
Untuk perintah sekali saja, tidak perlu mengubah file konfigurasi:git -c http.sslVerify=false clone https://...
Poin
8
Lebih baik perbaiki di sini: blogs.msdn.microsoft.com/phkelley/2014/01/20/…
Warren P
51

kiddailey Saya pikir sudah cukup dekat, namun saya tidak akan menonaktifkan verifikasi ssl melainkan hanya menyediakan sertifikat lokal:

Dalam file konfigurasi Git

[http]
    sslCAinfo = /bin/curl-ca-bundle.crt

Atau melalui baris perintah:

git config --global http.sslCAinfo /bin/curl-ca-bundle.crt
Oliver
sumber
7
Pada git untuk windows, inigit config --global http.sslCAinfo /usr/ssl/certs/ca-bundle.crt
Karsten Tinnefeld
Atau untuk sayagit config --global http.sslCAinfo /c/Program\ Files\ \(x86\)/Git/bin/curl-ca-bundle.crt
sparrowt
Untuk pengguna di MacPorts, inigit config --global http.sslCAinfo /opt/local/share/curl/curl-ca-bundle.crt
miken32
3
Dengan Git 2.8 Anda dapat menggunakan git config --list --show-originuntuk melihat di mana konfigurasi http.sslCAinfo diatur
Anish
Lokasi sertifikat saya di mac adalah: ~ / macports / share / curl / curl-ca-bundle.crt
user3282611
47

Saya menghadapi masalah ini juga. Dan akhirnya diselesaikan dengan mendapatkan panduan dari Blog MSDN ini .

Memperbarui

Sebenarnya Anda perlu menambahkan sertifikat di file sertifikat git curl-ca-bundel.cert yang berada di direktori Git \ bin.

Langkah

  1. Buka halaman github Anda di browser, dan klik ikon kunci di bilah alamat.
  2. Di jendela sembulan kecil yang terbuka, buka tautan 'lihat sertifikat', itu akan membuka jendela sembulan.
  3. Di mana arahkan ke tab sertifikat (ke-3 dalam kasus saya). Pilih simpul teratas yang merupakan sertifikat root. Dan tekan tombol salin sertifikat di bagian bawah dan simpan file.
  4. Dalam file explorer navigasikan direktori Git \ bin dan buka curl-ca-bundle.crt dalam editor teks.
  5. Buka file sertifikat yang diekspor (dalam langkah 3) di editor teks juga.
  6. Salin semua konten dari sertifikat yang diekspor ke akhir curl-ca-bundle.crt, dan simpan.

Akhirnya periksa statusnya. Harap perhatikan bahwa file curl-ca-bundle.crt cadangan sebelum diedit agar tetap aman.

Nadeem Jamali
sumber
3
"navigasi direktori Git \ bin dan buka curl-ca-bundle.crt" Tidak ada curl-ca-bundle.crt di git \ bin!
Anton K
@AntonK jika tidak ada, buat sendiri di notepad, dan ganti namanya dengan curl-ca-bundle.crt. Langkah-langkah lain tetap sama.
Nadeem Jamali
16
@AntonK Ini bisa disebut adil ca-bundle.crtdan berlokasi di mingw64\ssl\certsatau mingw32\ssl\certs.
Ian Kemp
Gunakan ini untuk SourceTree Atlassian. Instalasi GIT yang dibundel dalam% userprofile% \ appdata \ local \ attlassian \ sourcetree \ git_local. curl-ca-bundle.crt sudah ada, menambahkan sertifikat root base64 saya yang diekspor yang disandikan.
Xanothos
40

Jawaban untuk pertanyaan ini Menggunakan makecert untuk Pengembangan SSL memperbaiki ini untuk saya.

Saya tidak tahu mengapa, tetapi sertifikat yang dibuat oleh tautan sederhana 'Buat Sertifikat Mandiri' di IIS Manager tidak berhasil. Saya mengikuti pendekatan dalam pertanyaan terkait membuat dan memasang CA Root yang ditandatangani sendiri; kemudian menggunakannya untuk mengeluarkan Sertifikat Otentikasi Server untuk server saya. Saya menginstal keduanya di IIS.

Itu membuat situasi saya sama dengan posting blog yang dirujuk dalam pertanyaan awal. Setelah sertifikat root disalin / ditempelkan ke curl-ca-bundle.crt, git / curl combo puas.

RichardHowells
sumber
"Saya tidak tahu mengapa, tetapi sertifikat yang dibuat oleh tautan sederhana 'Buat Sertifikat Mandiri' di IIS Manager tidak melakukan trik ..." - Yang terbaik yang dapat saya katakan, itu menciptakan sertifikat cacat. Ada banyak aturan saat membuat sertifikat X.509; "lakukan seminimal mungkin agar berhasil" tidak lagi berfungsi dengan baik. Juga lihat Bagaimana Anda menandatangani Permintaan Penandatanganan Sertifikat dengan Otoritas Sertifikasi Anda dan Cara membuat sertifikat yang ditandatangani sendiri dengan openssl?
jww
Ini bekerja untuk saya, tetapi saya sementara menutup telepon pada bagian "Saya menginstal keduanya di IIS". Untuk menjelaskannya kepada orang lain ... sertifikat server ditetapkan dalam IIS, dan root CA perlu diimpor ke "Otoritas Sertifikasi Root Tepercaya" melalui utilitas pengelola sertifikat Windows (certmgr.msc)
Philip
26

Untuk menghindari penonaktifan verifikasi ssl sepenuhnya atau menduplikasi / meretas file sertifikat CA yang dibundel yang digunakan oleh git, Anda dapat mengekspor rantai sertifikat host menjadi file , dan membuat git menggunakannya:

git config --global http.https://the.host.com/.sslCAInfo c:/users/me/the.host.com.cer

Jika itu tidak berhasil, Anda dapat menonaktifkan verifikasi ssl hanya untuk host:

git config --global http.https://the.host.com/.sslVerify false

Catatan: Di bawah kemungkinan orang dalam serangan tengah saat verifikasi ssl dimatikan.

zionyx
sumber
4
Mungkin perlu dicatat bahwa --globalopsi tidak diperlukan: jika Anda menghilangkan --global, pengaturan hanya berlaku untuk repo git tertentu.
Wes Turner
19

Saya baru saja mengalami masalah yang sama tetapi menggunakan sourcetree di windows Langkah yang sama untuk GIT normal pada Windows juga. Mengikuti langkah-langkah berikut ini saya bisa menyelesaikan masalah ini.

  1. Memperoleh pohon sertifikat server Ini dapat dilakukan dengan menggunakan chrome. Arahkan ke alamat server. Klik pada ikon gembok dan lihat sertifikat. Ekspor semua rantai sertifikat sebagai format file yang disandikan base64 (PEM).
  2. Tambahkan sertifikat ke rantai kepercayaan pada file konfigurasi trust GIT Anda. Jalankan "git config --list". temukan konfigurasi "http.sslcainfo" ini menunjukkan di mana file trust sertifikat berada. Salin semua sertifikat ke file rantai kepercayaan termasuk "- -BEGIN- -" dan "- -END- -".
  3. Pastikan Anda menambahkan seluruh Rantai sertifikat ke file sertifikat

Ini harus menyelesaikan masalah Anda dengan sertifikat yang ditandatangani sendiri dan menggunakan GIT.

Saya mencoba menggunakan konfigurasi "http.sslcapath" tetapi ini tidak berhasil. Juga jika saya tidak memasukkan seluruh rantai dalam file sertifikat maka ini juga akan gagal. Jika ada yang punya petunjuk tentang ini, beri tahu saya karena hal di atas harus diulang untuk pemasangan baru.

Jika ini adalah sistem GIT maka Anda dapat menggunakan opsi dalam ALAT -> opsi tab GIt untuk menggunakan sistem GIT dan ini kemudian menyelesaikan masalah dalam sourcetree juga.

JamesD
sumber
2
"Jika saya tidak memasukkan seluruh rantai dalam file sertifikat maka ini juga akan gagal" - Saya baru saja mengalami masalah ini
Amani Kilumanga
Sejauh termasuk seluruh rantai, saya memiliki dua sertifikat di atas sertifikat github. Apakah saya memasukkannya sebagai root -> sertifikat berikutnya -> sertifikat github dalam file sslcainfo.crt?
Jecoms
Saya dapat mengakses paket git repo dengan hanya menambahkan cert root.
Jecoms
Untuk pembaca masa depan. Tidak tahu apakah itu penting, tapi saya meletakkan sertifikat "root" (paling atas) di AKHIR file (http.sslcainfo). Dan kemudian ketika saya pergi dari sertifikat root dalam rantai, saya meletakkan sertifikat itu di atas entri file (http.sslcainfo) sebelumnya.
granadaCoder
11

Dalam kasus repositori github (atau sertifikat yang tidak ditandatangani sendiri) , memilih di bawah ini saat menginstal Git-on-windows, menyelesaikan masalah.

masukkan deskripsi gambar di sini

Jawad Al Shaikh
sumber
1
Anda sepertinya telah menjawab pertanyaan yang berbeda. Pertanyaan OP terkait dengan sertifikat yang ditandatangani sendiri pada klien Windows.
jww
@jww judul pertanyaan adalah pesan kesalahan git yang ditampilkan bahkan jika repo BUKAN SSL yang ditandatangani sendiri!
Jawad Al Shaikh
Ini membuat saya melewati kesalahan, tetapi bagi saya mengakses GitHub Enterprise diperlukan beberapa generasi kunci dan penambahan kunci publik / pribadi.
ΩmegaMan
1
Jika sertifikat yang ditandatangani sendiri telah dimasukkan ke toko sertifikat windows oleh admin windows yang membantu melalui kebijakan grup maka jawaban ini juga bagus.
JamesD
7

Saya pernah mengalami masalah ini sebelumnya, dan menyelesaikannya menggunakan konfigurasi berikut.

[http "https://your.domain"] sslCAInfo=/path/to/your/domain/priviate-certificate

Sejak git 2.3.1, Anda dapat menggunakan https://your.domainsetelah http untuk menunjukkan bahwa sertifikat berikut hanya untuk itu.

Ben PP Tung
sumber
1
Ini adalah solusi paling sederhana & paling tepat yang saya temukan, jika Anda juga mengonfigurasi git config --global http.sslCAInfo <your-server-self-signed-cert.pem>sebelumnya (Oleh karena itu menyebabkan kesalahan "tidak dapat memperoleh sertifikat penerbit lokal")
Johnny Wong
INI adalah jawaban yang tepat untuk masalah saya (dan bukan hanya "menonaktifkan validasi SSL" ~~). Tidak tahu bahwa Anda dapat menentukan lokasi sertifikat hanya untuk host tertentu. Kartu as!
Rocío García Luque
1
  1. Unduh sertifikat dari tautan ini: https://github.com/bagder/ca-bundle
  2. Tambahkan ke C:\Program Files\Git\bin danC:\Program Files\Git\mingw64\bin

Kemudian coba sesuatu seperti: git clone https://github.com/heroku/node-js-getting-started.git

Alex
sumber
1

Satu hal yang mengacaukan saya adalah format path (pada PC Windows saya). Saya awalnya punya ini:

git config --global http.sslCAInfo C:\certs\cacert.pem

Tetapi itu gagal dengan kesalahan "tidak dapat memperoleh sertifikat penerbit lokal".

Yang akhirnya berhasil adalah ini:

git config --global http.sslCAInfo "C:\\certs\\cacert.pem"
Wayne S.
sumber
1

Dalam kasus saya, karena saya telah menginstal Terminal ConEmu untuk Window 7, itu menciptakan ca-bundleinstalasi selama di C:\Program Files\Git\mingw64\ssl\certs.

Jadi, saya harus menjalankan perintah-perintah berikut pada terminal untuk membuatnya berfungsi:

$ git config --global http.sslbackend schannel
$ git config --global http.sslcainfo /mingw64/ssl/certs/ca-bundle.crt

Karenanya, saya C:\Program Files\Git\etc\gitconfigberisi yang berikut ini:

[http]
    sslBackend = schannel
    sslCAinfo = /mingw64/ssl/certs/ca-bundle.crt

Juga, saya memilih opsi yang sama seperti yang disebutkan di sini ketika menginstal Git.

Semoga itu bisa membantu!

rc.adhikari
sumber
1

Untuk memperbaiki kesalahan spesifik, masalah sertifikat SSL: tidak dapat memperoleh sertifikat penerbit lokal di git

Saya memiliki masalah yang sama dengan sertifikat Mari Enkripsi.

Situs web dengan https yang kami butuhkan:

SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf

tapi git pull mengatakan:

fatal: unable to access 'https://example.com/git/demo.git/': SSL certificate problem: unable to get local issuer certificate

Untuk memperbaikinya, kita juga perlu menambahkan:

SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
Sérgio
sumber
-5

Gunakan perintah ini sebelumnya untuk menjalankan pembaruan komposer / instal:

git config --global http.sslverify false
Prashant Paliwal
sumber