Kendinden imzalı sertifikaya sahip Windows'ta git kullanılarak “yerel yayıncı sertifikası alınamıyor” çözülemiyor


283

Windows'ta Git kullanıyorum. MsysGit paketini yükledim. Test havuzumun sunucuda kendinden imzalı bir sertifikası var. Depoya HTTP kullanarak sorunsuz bir şekilde erişebilir ve kullanabilirim. HTTPS'ye geçmek şu hatayı verir:

SSL Sertifikası sorunu: yerel yayıncı sertifikası alınamıyor.

Windows 7 - istemci makinemin Güvenilen Kök Sertifika Yetkililerine kendinden imzalı sertifika yükledim. Internet Explorer'da HTTPS veri havuzu URL'sine hata mesajı vermeden göz atabiliyorum.

Philip Kelley'in bu blog yazısı , cURL'nin istemci makinenin sertifika deposunu kullanmadığını açıkladı. Blog yayınının curl-ca-bundle.crtGit'i özel bir kopyasını oluşturmak ve Git'i kullanacak şekilde yapılandırmak için önerilerini izledim . Eminim Git kopyamı kullanıyor. Kopyayı yeniden adlandırırsam; Git dosyanın eksik olduğundan şikayet ediyor.

Blog gönderisinde de belirtildiği gibi sertifikamı yapıştırdım, yine de "yerel yayıncı sertifikası alınamıyor" iletisini alıyorum.

Git'in hala bir GitHub Deposunu HTTPS ile klonlayarak çalıştığını doğruladım.

O blog yayınına farklı gördüğüm tek şey benim sertifika olmasıdır olduğu ulaşmak için hiçbir zinciri yoktur - kökü. Sertifikam ilk olarak IIS8 IIS Yöneticisi 'Kendinden İmzalı Sertifika Oluştur' bağlantısını tıklamaktan geldi. Belki de bu bir sertifikayı cURL'nin beklediğinden farklı yapar.

Git / cURL'un kendinden imzalı sertifikayı kabul etmesini nasıl sağlayabilirim?



1
Ayrıca, yerel ağınızın dosyaları github deposuna aktarmasına izin verilip verilmediğini kontrol edin. Bazı güvenlik duvarı veya virüsten koruma kısıtlaması olabilir.
shasi kanth

Bower kullanırken bu hatayla karşılaşan biri varsa, içeriğiyle bir .bowerrc dosyası oluşturun { "strict-ssl": false }. Bana teşekkür etme, bu adama teşekkür et: stapp.space/fight-with-2 Bu hatayla 5 saate yakın bir süre boyunca savaştım, düz !!
Ganesh Jadhav

Yanıtlar:


267

Git doğrulamasını açın ve SSL doğrulamasını tamamen devre dışı bırakmak istiyorsanız komutu çalıştırın.

git config --global http.sslVerify false

Not: Bu çözüm sizi ortadaki adam saldırıları gibi saldırılara açabilir . Bu nedenle doğrulamayı mümkün olan en kısa sürede tekrar açın:

git config --global http.sslVerify true

70
Bu cevap, ortadaki adam saldırılarına izin vererek SSL güvenliğini yener. Diğer cevaplar git'i ihtiyacınız olan sertifikaya güvenecek şekilde nasıl yapılandıracağınızı zaten açıklıyor.
dsh

12
gerçekten de korkunç bir yanıt, onlara SSL'yi tekrar açmalarını bile söylemiyorsunuz. Bu nedenle güvenlik açıkları meydana gelir.
Edgar Aroutiounian

Gitblit kullanıyorsanız, sshVerify false yapmak yerine başka bir seçenek yoktur.
Samir

24
Tek bir git komutu için TLS / SSL doğrulamasını devre dışı bırakmak için aşağıdaki komutu kullanın:git -c http.sslVerify=false clone https://domain.com/path/to/git
Maxim Suslov

1
Zaten aşağıda sağlanan birkaç çözüm var ve eksilerini zaten önerdim. Bu nedenle, sorunu çözmek için hangi çözümleri seçeceğiniz size bağlıdır.
Samir

154

Sorun git varsayılan "Linux" kripto arka ucunu kullanarak olmasıdır.

Windows 2.14 için Git'ten başlayarak, Git'i kripto arka ucu olarak yerleşik Windows ağ katmanı olan SChannel'i kullanacak şekilde yapılandırabilirsiniz. Bu, Windows sertifika depolama mekanizmasını kullanacağınız ve curl CA depolama mekanizmasını açıkça yapılandırmanız gerekmediği anlamına gelir: https://msdn.microsoft.com/en-us/library/windows/desktop/aa380123(v= VS.85) .Aspx

Sadece çalıştırın:

git config --global http.sslbackend schannel

Bu yardımcı olur.

Windows için git'i kurarken artık schannel kullanmak standart ayardır, ayrıca mümkünse SSH tarafından depoları kontrol etmemeniz önerilir, çünkü https'nin yapılandırılması daha kolay ve bir güvenlik duvarı tarafından engellenme olasılığı daha düşüktür, daha az arıza olasılığı anlamına gelir.


1
Ancak bu çözümün git config --global http.sslCAInfo <my-server-self-signed-cert.pem>başarısız olabileceğini unutmayın . Yapılandırdımhttp.sslCAInfoSunucum için kendinden imzalı bir sertifika kullanmak üzere ve bu nedenle "SSL Sertifikası sorunu: yerel yayıncı sertifikası alınamıyor" ile karşılaşmamın nedeni (OP ile aynı olmayabilir) git clone https://github.com/Microsoft/vscode.git. Son olarak çözmek için git sunucuma özgü sslCAInfo yapılandırmamı ayarlamak için stackoverflow.com/a/47196562/1323552 (Ben PP Tung) yanıtını kullandım .
Johnny Wong

94

Ben de bu sorunu yaşadım. Benim durumumda, her push ile bir sunucuda çalışan bir kopyayı güncellemek için bir alma sonrası Git kancası almaya çalışıyordum. Bağlantı kurduğunuz blogdaki talimatları izlemeye çalıştım. Benim için de işe yaramadı ve kullanıcı başına ayarları geçersiz kılmak da işe yaramadı.

Yapmam gereken, Git için bir bütün olarak SSL doğrulamasını (makalede bahsedildiği gibi) devre dışı bırakmak oldu. Mükemmel bir çözüm değil, ama daha iyi bir çözüm bulana kadar işe yarayacak.

Git config metin dosyasını (Notepad ++ gibi favori satır sonu nötr uygulamam ile) düzenledim:

C: \ Program Dosyaları (x86) \ Git \ etc \ gitconfig

[Http] bloğuna sslVerify'ı devre dışı bırakmak için bir seçenek ekledim. Ben bittiğinde şöyle görünüyordu:

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

Hile yaptı.

NOT:

  • Bu SSL doğrulamasını devre dışı bırakır ve uzun vadeli bir çözüm olarak önerilmez.

  • Hala harika olmayan ancak ayarı yerelleştiren bu havuz başına devre dışı bırakabilirsiniz.

  • LetsEncrypt.org'un ortaya çıkmasıyla, artık SSL'yi kendinden imzalı sertifikalara alternatif olarak kurmak oldukça basit, otomatik ve ücretsizdir ve sslVerify'ı kapatma ihtiyacını ortadan kaldırır.


145
Bu SSL'nin amacını bozar.
syaz

49
SSL doğrulamasını devre dışı bırakmak için "git config --global http.sslVerify false" komutunu kullanabilirsiniz
CleanCoder 21:14

6
sslCAinfoYapılandırma girişini işaret ettiğiniz için teşekkür ederiz ; ancak sistem genelinde git için SSL'yi kalıcı olarak devre dışı bırakmanın pek mantıklı olmadığı için cevabı desteklemiyorum (sistem genelinde devre dışı bırakmaya, sonra klonlamaya, sonra yeniden etkinleştirmeye ve ardından devre dışı bırakmaya çalıştınız mı? yeni klonlanan repo için yerel git config?).
7heo.tk

35
Bir kerelik komut için, yapılandırma dosyalarını değiştirmeye gerek yoktur:git -c http.sslVerify=false clone https://...
pts


51

kiddailey Sanırım oldukça yakındı, ancak ssl doğrulamasını devre dışı bırakmaz, aksine yerel sertifikayı :

Git yapılandırma dosyasında

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

Veya komut satırı üzerinden:

git config --global http.sslCAinfo /bin/curl-ca-bundle.crt

7
Pencereler için git, bugit config --global http.sslCAinfo /usr/ssl/certs/ca-bundle.crt
Karsten Tinnefeld

Veya benim içingit config --global http.sslCAinfo /c/Program\ Files\ \(x86\)/Git/bin/curl-ca-bundle.crt
sparrowt

MacPorts'taki kullanıcılar için bugit config --global http.sslCAinfo /opt/local/share/curl/curl-ca-bundle.crt
miken32

3
Git 2.8 ile git config --list --show-originhttp.sslCAinfo yapılandırmasının nerede ayarlandığını görebilirsiniz
Anish

Mac'teki sertifika konumum: ~ / macports / share / curl / curl-ca-bundle.crt
user3282611

47

Bu sorunla da karşılaştım. Ve sonunda bu MSDN Blogundan rehberlik alarak çözüldü .

Güncelleme

Aslında sertifikayı git \ bin dizininde bulunan curl-ca-bundel.cert sertifika dosyasına eklemeniz gerekir.

adımlar

  1. Github sayfanızı tarayıcıda açın ve adres çubuğundaki kilit simgesini tıklayın.
  2. Açılan küçük açılır pencerede 'sertifikayı görüntüle' bağlantısına gidin, bir açılır pencere açar.
  3. Hangi sertifikalar sekmesine gidin (benim durumumda 3.). Kök sertifika olan üst düğümü seçin. Ve alttaki sertifika kopyala düğmesine basın ve dosyayı kaydedin.
  4. Dosya gezgininde Git \ bin dizinine gidin ve metin düzenleyicide curl-ca-bundle.crt dosyasını açın.
  5. Dışa aktarılan sertifika dosyasını da (3. adımda) metin düzenleyicide açın.
  6. Dışa aktarılan sertifikadaki tüm içeriği curl-ca-bundle.crt dosyasının sonuna kopyalayın ve kaydedin.

Son olarak durumu kontrol edin. Güvenli tarafta kalmak için, düzenlemeden önce backup curl-ca-bundle.crt dosyasının yedeklendiğini lütfen unutmayın.


3
"Git \ bin dizininde gezin ve curl-ca-bundle.crt dosyasını aç" Git \ bin'de curl-ca-bundle.crt yok!
Anton K

@AntonK yoksa, not defterinde bir tane oluşturun ve curl-ca-bundle.crt ile yeniden adlandırın. Diğer adımlar aynı kalır.
Nadeem Jamali

16
@AntonK Sadece denilebilir ca-bundle.crtve mingw64\ssl\certsveya içinde bulunabilir mingw32\ssl\certs.
Ian Kemp

Bunu Atlassian'ın SourceTree için kullandı. Birlikte verilen GIT yüklemesi% userprofile% \ appdata \ local \ attlassian \ sourcetree \ git_local dizinindedir. curl-ca-bundle.crt zaten mevcuttu, base64 kodlu dışa aktarılan kök sertifikamı ekledi.
Xanothos

40

Bu sorunun cevabı Makecert for Development SSL kullanmak bunu benim için düzeltti.

Neden bilmiyorum, ancak IIS Yöneticisi'nde basit 'Kendinden İmzalı Sertifika Oluştur' bağlantısı tarafından oluşturulan sertifika hile yapmaz. Kendinden imzalı bir CA Kökü oluşturma ve kurma ile ilgili sorudaki yaklaşımı izledim; daha sonra sunucum için bir Sunucu Kimlik Doğrulama Sertifikası vermek için bunu kullanın. Her ikisini de IIS'ye yükledim.

Bu durum, orijinal soruda atıfta bulunulan blog gönderisi ile aynı duruma geliyor. Kök sertifika kopyalandığında / curl-ca-bundle.crt dosyasına yapıştırıldıktan sonra git / curl combo memnun kaldı.


"Neden bilmiyorum, ancak IIS Yöneticisi'nde basit 'Kendinden İmzalı Sertifika Oluştur' bağlantısı tarafından oluşturulan sertifika hile yapmaz ..." - Söyleyebileceğim en iyi, hatalı biçimlendirilmiş sertifikalar oluşturur. X.509 sertifikaları oluştururken birçok kural vardır; "çalışmasını sağlamak için gerekenleri yapın" artık işe yaramıyor. Ayrıca bkz. Sertifika İmzalama İsteğini Sertifika Yetkilinizle nasıl imzalarsınız ve openssl ile kendinden imzalı bir sertifika nasıl oluşturulur?
jww

Bu benim için çalıştı, ama geçici olarak "Her ikisini de IIS'ye kurdum" bölümüne takıldım. Başkaları için onay vermek için ... sunucu sertifikası IIS'de atanır ve kök CA'nın Windows sertifika yöneticisi yardımcı programı (certmgr.msc) aracılığıyla
Philip

26

SSL doğrulamasını tamamen devre dışı bırakmamak veya git tarafından kullanılan paketlenmiş CA sertifika dosyasını çoğaltmak / hacklemekten kaçınmak için , ana bilgisayarın sertifika zincirini bir dosyaya aktarabilir ve git'i kullanarak kullanabilirsiniz:

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

Bu işe yaramazsa, ssl doğrulamasını yalnızca ana bilgisayar için devre dışı bırakabilirsiniz :

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

Not: SSL doğrulaması kapatıldığında orta saldırılarda olası adama maruz kalır.


4
--globalSeçeneğin gerekli olmadığına dikkat etmek gerekebilir: atlarsanız --global, ayar yalnızca söz konusu git repo için geçerlidir.
Wes Turner

19

Ben sadece aynı sorunu yaşadım ama Windows'ta sourcetree kullanarak Windows da normal GIT için aynı adımlar. Aşağıdaki adımları izleyerek bu sorunu çözebildim.

  1. Sunucu sertifika ağacını alma Bu işlem krom kullanılarak yapılabilir. Sunucu adresi olarak gidin. Asma kilit simgesine tıklayın ve sertifikaları görüntüleyin. Tüm sertifika zincirini base64 kodlu dosyalar (PEM) formatında dışa aktarın.
  2. Sertifikaları GIT trust config dosyanızın güven zincirine ekleyin "git config --list" komutunu çalıştırın. sertifika güven dosyasının nerede olduğunu gösteren "http.sslcainfo" yapılandırmasını bulun. Tüm sertifikaları "- -BEGIN- -" ve "- -END- -" dahil olmak üzere güven zinciri dosyasına kopyalayın.
  3. Sertifika Zincirinin tamamını sertifika dosyasına eklediğinizden emin olun

Bu, kendinden imzalı sertifikalarla ve GIT kullanarak sorununuzu çözmelidir.

"Http.sslcapath" yapılandırmasını kullanmayı denedim ama bu işe yaramadı. Ayrıca sertifikalar dosyasında tüm zinciri dahil etmediyse, bu da başarısız olur. Bunların üzerinde işaretçiler varsa, lütfen yeni bir yükleme için yukarıdaki işlemlerin tekrarlanması gerektiğini bize bildirin.

Bu sistem GIT ise, sistem GIT'i kullanmak için TOOLS -> seçenekler GIt sekmesindeki seçenekleri kullanabilirsiniz ve bu da sorunu sourcetree'de de çözer.


2
"Ben sertifikalar dosyasında tüm zinciri dahil etmediyseniz o zaman bu da başarısız olur" - Ben sadece bu sorunla karşılaştı
Amani Kilumanga

Tüm zinciri dahil edersek, github sertifikasının üstünde iki tane certsim var. Bunları sslcainfo.crt dosyasında root-> next cert-> github cert olarak ekleyebilir miyim?
Jecoms

Git kök paketlerine sadece kök sertifikası ekleyerek erişebildim.
Jecoms

Gelecekteki okuyucular için. Önemli olup olmadığı hakkında bir fikrim yok ama "root" (en üstte) sertifikasını (http.sslcainfo) dosyasının sonuna koyuyorum. Ve sonra zincirdeki kök sertifikadan uzaklaştıkça, bu sertifikayı (http.sslcainfo) dosyasının önceki girişinin üzerine koydum.
granadaCoder

11

Durumunda github Arşivleri (veya herhangi hiçbiri-kendi imzasını certs) kurarken aşağıda seçerek Git-pencerelerde sorunu çözüldü.

resim açıklamasını buraya girin


1
Farklı bir soruya cevap vermiş gibisin. OP'nin sorusu, Windows istemcilerinde kendinden imzalı sertifikalarla ilgilidir.
jww

@jww soru başlığı, repo kendinden imzalı SSL DEĞİL olsa bile gösterilen bir git hata mesajıdır!
Jawad Al Shaikh

Bu, hatayı geçti, ancak GitHub Enterprise'a erişmek için bazı anahtar oluşturma ve genel / özel anahtarların eklenmesi gerekiyordu.
MmegaMan

1
Kendinden imzalı sertifika, bir grup ilkesi aracılığıyla yardımcı bir windows yöneticisi tarafından windows sertifika deposuna konulduysa, bu yanıt da iyi bir sorudur.
JamesD

7

Bu sorunu daha önce yaşadım ve aşağıdaki yapılandırmayı kullanarak çözdüm.

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

Git 2.3.1'den beri, http'den https://your.domainsonra aşağıdaki sertifikanın sadece onun için olduğunu belirtebilirsiniz.


1
Daha git config --global http.sslCAInfo <your-server-self-signed-cert.pem>önce de yapılandırdıysanız bulduğum en basit ve en kesin çözüm (Bu nedenle "yerel yayıncı sertifikası
Johnny Wong

BU sorunum için doğru cevap (ve sadece "SSL doğrulamasını devre dışı bırakmak" değil ~ ~). Sertifikanın konumunu yalnızca belirli bir ana bilgisayar için belirtebileceğinizi bilmiyordum. Şampiyon!
Rocío García Luque

1
  1. Bu bağlantıdan sertifika indirin: https://github.com/bagder/ca-bundle
  2. Bunu ekleyin C:\Program Files\Git\bin veC:\Program Files\Git\mingw64\bin

Sonra şöyle bir şey deneyin: git clone https://github.com/heroku/node-js-getting-started.git


1

Beni mahveden bir şey yolun biçimiydi (Windows bilgisayarımda). Başlangıçta bu vardı:

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

Ancak bu, "yerel yayıncı sertifikası alınamadı" hatasıyla başarısız oldu.

Sonunda işe yarayan şuydu:

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

1

Benim durumumda, Windows 7 için ConEmu Terminalinica-bundle kurduğumda, kurulum sırasındaC:\Program Files\Git\mingw64\ssl\certs .

Bu nedenle, terminalde çalışmasını sağlamak için aşağıdaki komutları çalıştırmam gerekiyor:

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

Bu nedenle, benim C:\Program Files\Git\etc\gitconfigaşağıdakileri içerir:

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

Ayrıca, burada belirtilenle aynı seçeneği seçtim Git'i yüklerken .

Umarım yardımcı olur!


1

Belirli hata SSL sertifikası sorununu çözmek için: git'te yerel yayıncı sertifikası alınamıyor

Let's Encrypt sertifikalarıyla da aynı sorunu yaşadım.

İhtiyacımız olan https içeren bir web sitesi:

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

ama git pull diyor ki:

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

Düzeltmek için şunu da eklememiz gerekir:

SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem

-5

Besteci güncellemesini / yüklemesini çalıştırmak için önce bu komutu kullanın:

git config --global http.sslverify false
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.