web-gelistirme-sc.com

Git'in kendinden imzalı bir sertifikayı kabul etmesini nasıl sağlayabilirim?

Git'i kullanarak kendinden imzalı bir sertifikayı kabul etmesini söylemenin bir yolu var mı?

Git sunucusu barındırmak için bir https sunucusu kullanıyorum, ancak şimdilik sertifika kendinden imzalı.

İlk defa orada repo oluşturmaya çalıştığımda:

git Push Origin master -f

Hatayı alıyorum:

error: Cannot access URL     
https://the server/git.aspx/PocketReferences/, return code 22

fatal: git-http-Push failed
528

Belirli bir sertifikayı kalıcı olarak kabul etmek için

http.sslCAPath veya http.sslCAInfo öğesini deneyin. Adam Spiers'in cevabı bazı harika örnekler verir. Bu soruya en güvenli çözümdür.

Tek bir git komutu için TLS/SSL doğrulamasını devre dışı bırakmak için

uygun config değişkeni ile -c __git değerini geçmeyi deneyin veya Flow'ın cevabını :

git -c http.sslVerify=false clone https://example.com/path/to/git

Belirli bir depo için SSL doğrulamasını devre dışı bırakmak için

Havuz tamamen sizin kontrolünüz altındaysa, deneyebilirsiniz:

git config http.sslVerify false

Global olarak TLS (/ SSL) sertifika doğrulamasını devre dışı bırakmak çok güvensiz bir uygulamadır. Yapma Yukarıdaki komutu --global değiştiriciyle yayınlamayın.


git dosyasında epeyce SSL yapılandırma seçeneği var. git config kılavuz sayfasından:

http.sslVerify
    Whether to verify the SSL certificate when fetching or pushing over HTTPS.
    Can be overridden by the GIT_SSL_NO_VERIFY environment variable.

http.sslCAInfo
    File containing the certificates to verify the peer with when fetching or pushing
    over HTTPS. Can be overridden by the GIT_SSL_CAINFO environment variable.

http.sslCAPath
    Path containing files with the CA certificates to verify the peer with when
    fetching or pushing over HTTPS.
    Can be overridden by the GIT_SSL_CAPATH environment variable.

Diğer birkaç faydalı SSL yapılandırma seçeneği:

http.sslCert
    File containing the SSL certificate when fetching or pushing over HTTPS.
    Can be overridden by the GIT_SSL_CERT environment variable.

http.sslKey
    File containing the SSL private key when fetching or pushing over HTTPS.
    Can be overridden by the GIT_SSL_KEY environment variable.

http.sslCertPasswordProtected
    Enable git's password Prompt for the SSL certificate. Otherwise OpenSSL will
    Prompt the user, possibly many times, if the certificate or private key is encrypted.
    Can be overridden by the GIT_SSL_CERT_PASSWORD_PROTECTED environment variable.
941
Christopher

GIT_SSL_NO_VERIFY öğesini true olarak ayarlayabilirsiniz:

GIT_SSL_NO_VERIFY=true git clone https://example.com/path/to/git

veya alternatif olarak Git’i komut satırındaki bağlantıyı doğrulamamak için yapılandırın:

git -c http.sslVerify=false clone https://example.com/path/to/git

SSL/TLS sertifikalarını doğrulamazsanız, MitM saldırılarına karşı duyarlı olduğunuzu unutmayın.

149
Flow

[EDIT:] var olan yanıtların orijinal versiyonları değilim, çünkü güvenlik kontrollerini devre dışı bırakmak sunulan ilk çözüm değil, son çare olmalıdır. Bazı ek doğrulama yöntemleri olmadan ilk faturada kendinden imzalı sertifikalara güvenemeseniz bile, sonraki git işlemleri için sertifikayı kullanmak en azından yalnızca sonra siz meydana gelen saldırılar için hayatı zorlaştırır Sertifikayı indirdim. Başka bir deyişle, indirdiğiniz sertifika ise genuine ise, o zamandan itibaren iyisinizdir. Bunun aksine, doğrulamayı devre dışı bırakmanız durumunda, herhangi bir noktada ortadaki adam saldırısına herhangi bir noktada kadar açıksınızdır.

Belirli bir örnek vermek gerekirse: ünlü repo.or.cz depo sağlar kendinden imzalı bir sertifika . Bu dosyayı indirebilir, _/etc/ssl/certs_ gibi bir yere yerleştirebilir ve sonra şunu yapabilirim:

_# Initial clone
GIT_SSL_CAINFO=/etc/ssl/certs/rorcz_root_cert.pem \
    git clone https://repo.or.cz/org-mode.git

# Ensure all future interactions with Origin remote also work
cd org-mode
git config http.sslCAInfo /etc/ssl/certs/rorcz_root_cert.pem
_

Burada yerel _git config_ kullanmanın (yani, _--global_ olmadan) kullanılması, kendinden imzalı bir sertifikanın yalnızca bu özel havuz için güvenilir olduğu anlamına gelir. Aynı zamanda _GIT_SSL_CAPATH_ kullanmaktan daha iyidir, çünkü potansiyel olarak tehlikeye girebilecek farklı bir Sertifika Makamı tarafından doğrulama yapılması git riskini ortadan kaldırır.

129
Adam Spiers

Kendinden İmzalı Sertifika Yetkilileri için Global .gitconfig

Benim ve meslektaşlarımın buradaki iyiliği için sslVerify işlevini devre dışı bırakmadan kendinden imzalı sertifikaları nasıl çalıştıracağımızdır. .gitconfig'nuzu düzenleyin / git config --global -e kullanarak şunları ekleyin:

# Specify the scheme and Host as a 'context' that only these settings apply
# Must use Git v1.8.5+ for these contexts to work
[credential "https://your.domain.com"]
  username = user.name

  # Uncomment the credential helper that applies to your platform
  # Windows
  # helper = manager

  # OSX
  # helper = osxkeychain

  # Linux (in-memory credential helper)
  # helper = cache

  # Linux (permanent storage credential helper)
  # https://askubuntu.com/a/776335/491772

# Specify the scheme and Host as a 'context' that only these settings apply 
# Must use Git v1.8.5+ for these contexts to work
[http "https://your.domain.com"]
  ##################################
  # Self Signed Server Certificate #
  ##################################

  # MUST be PEM format
  # Some situations require both the CAPath AND CAInfo 
  sslCAInfo = /path/to/selfCA/self-signed-certificate.crt
  sslCAPath = /path/to/selfCA/
  sslVerify = true

  ###########################################
  # Private Key and Certificate information #
  ###########################################

  # Must be PEM format and include BEGIN CERTIFICATE / END CERTIFICATE, 
  # not just the BEGIN PRIVATE KEY / END PRIVATE KEY for Git to recognise it.
  sslCert = /path/to/privatekey/myprivatecert.pem

  # Even if your PEM file is password protected, set this to false.
  # Setting this to true always asks for a password even if you don't have one.
  # When you do have a password, even with this set to false it will Prompt anyhow. 
  sslCertPasswordProtected = 0

Referanslar:

git clone- ining yaparken config belirtin

Repo bazında uygulamanız gerekirse, belgeler size repo dizininizde git config --local komutunu çalıştırmanızı söyler. Yerel olarak klonlanmış bir repo henüz bulunmadığında bu işe yaramadı, değil mi?

global -> local hokey-pokey işlevini global config'nizi yukarıdaki gibi ayarlayarak yapabilirsiniz ve klonlandığında bu ayarları yerel repo config cihazınıza kopyalayabilirsiniz ... 

VEYA yapabilecekleriniz klonlandığında hedef repoya uygulanan git clone adresinde config komutlarını belirtmektir.

# Declare variables to make clone command less verbose     
OUR_CA_PATH=/path/to/selfCA/
OUR_CA_FILE=$OUR_CA_PATH/self-signed-certificate.crt
MY_PEM_FILE=/path/to/privatekey/myprivatecert.pem
SELF_SIGN_CONFIG="-c http.sslCAPath=$OUR_CA_PATH -c http.sslCAInfo=$OUR_CA_FILE -c http.sslVerify=1 -c http.sslCert=$MY_PEM_FILE -c http.sslCertPasswordProtected=0"

# With this environment variable defined it makes subsequent clones easier if you need to pull down multiple repos.
git clone $SELF_SIGN_CONFIG https://mygit.server.com/projects/myproject.git myproject/

Bir astar

EDIT: Bkz. VonC 's answer , 2.14.x/2.15' den belirli git sürümleri için mutlak ve bağıl yollar hakkında bir uyarıya işaret eder.

git clone -c http.sslCAPath="/path/to/selfCA" -c http.sslCAInfo="/path/to/selfCA/self-signed-certificate.crt" -c http.sslVerify=1 -c http.sslCert="/path/to/privatekey/myprivatecert.pem" -c http.sslCertPasswordProtected=0 https://mygit.server.com/projects/myproject.git myproject/

CentOS Instagram Hesabındaki Resim ve Videoları unable to load client key

Eğer bunu CentOS'ta deniyorsanız ve .pem dosyanız size veriyor 

unable to load client key: "-8178 (SEC_ERROR_BAD_KEY)"

Ardından bu StackOverflow cevabını isteyeceksinizcurl'ın Açık SSL yerine NSS'yi nasıl kullandığı hakkında.

Ve kaynağından curl 'ı yeniden kurmak istersiniz :

git clone http://github.com/curl/curl.git curl/
cd curl/
# Need these for ./buildconf
yum install autoconf automake libtool m4 nroff Perl -y
#Need these for ./configure
yum install openssl-devel openldap-devel libssh2-devel -y

./buildconf
su # Switch to super user to install into /usr/bin/curl
./configure --with-openssl --with-ldap --with-libssh2 --prefix=/usr/
make
make install

libcurl hala paylaşılan kütüphane olarak bellekte olduğundan bilgisayarı yeniden başlat

Python, pip ve conda

Related: Python tarafından Windows'ta kullanılan CA Store'a nasıl özel bir CA Root sertifikası eklenir?

23
Josh Peak

Bu sorunla karşılaşmaya devam ediyorum, bu yüzden kendinden imzalı sertifikayı sunucudan indirip ~/.gitcerts'e yüklemek için bir betik yazdım, ardından git-config'i bu sertifikalara işaret edecek şekilde güncelle. Global config içinde saklanır, bu yüzden uzaktan kumanda başına sadece bir kez çalıştırmanız yeterlidir.

https://github.com/iwonbigbro/tools/blob/master/bin/git-remote-install-cert.sh

14
Craig

Bu cevap, bu makaleden Michael Kauffman tarafından yazılmıştır.

Kurumsal bir SSL sertifikasına sahip Windows için Git'i kullanın

Konu

Kurumsal bir SSL sertifikanız varsa ve repo'nuzu konsoldan veya VSCode'dan klonlamak istiyorsanız, aşağıdaki hatayı alırsınız:

ölümcül: ‘ https: // myserver/tfs/DefaultCollection/_git/Proj/ 'dosyasına erişilemiyor: SSL sertifikası sorunu: yerel sertifika sertifikası alınamıyor

Çözüm:

  1. Kök kendinden imzalı Sertifikayı bir dosyaya verin. Bunu tarayıcınızdan yapabilirsiniz.

  2. Git klasöründe “ca-bundle.crt” dosyasını bulun (şimdiki sürümü C:\Program Files\Git\usr\ssl\certs ama geçmişte değişti). Dosyayı kullanıcı profilinize kopyalayın. VSCode gibi bir metin editörüyle açın ve verilen sertifikanın içeriğini dosyanın sonuna ekleyin.

Şimdi yeni dosyayı kullanmak için git'i yapılandırmamız gerekiyor:

git config --global http.sslCAInfo C:/Users/<yourname>/ca-bundle.crt

Bu, aşağıdaki profili kullanıcı profilinizin kökündeki .gitconfig dosyasına ekleyecektir.

[http] sslCAInfo = C:/Users/<yourname>/ca-bundle.crt

6
AperioOculus

Antivirüs ve güvenlik duvarı ayarlarınızı kontrol edin.

Bir günden diğerine git artık çalışmadı. Yukarıda açıklananlarla, Kaspersky'nin ortada kendinden imzalı bir Anti-virüs kişisel kök sertifikası koyduğunu gördüm. Yukarıdaki talimatları izleyerek Git'in bu sertifikayı kabul etmesine izin veremedim. Bundan vazgeçtim. Benim için çalışan, şifreli bağlantıları tara özelliğini devre dışı bırakmaktır.

  1. Kaspersky'i aç
  2. Ayarlar> Ek> Ağ> Şifreli bağlantıları tarama

Bundan sonra, sslVerify etkinken git tekrar çalışıyor.

Not. Bu benim için hala tatmin edici değil, çünkü Anti-Virus etkinliğimin bu özelliğini kullanmak istiyorum. Gelişmiş ayarlarda Kaspersky, bu özellik ile çalışmayacak web sitelerinin bir listesini gösterir. Github bunlardan biri olarak listelenmemiş. Kaspersky forumunda kontrol edeceğim. Örneğin bazı konular var gibi görünüyor. https://forum.kaspersky.com/index.php?/topic/395220-kis-interfering-with-git/&tab=comments#comment-2801211

3
Henk

Josh Peak 's answer içinde olduğu gibi sslKey veya sslCert kullanarak bir liner kullanırken dikkatli olun.

git clone -c http.sslCAPath="/path/to/selfCA" \
  -c http.sslCAInfo="/path/to/selfCA/self-signed-certificate.crt" \
  -c http.sslVerify=1 \
  -c http.sslCert="/path/to/privatekey/myprivatecert.pem" \
  -c http.sslCertPasswordProtected=0 \
https://mygit.server.com/projects/myproject.git myproject

Yalnızca Git 2.14.x/2.15 (Q3 2015) ~username/mykey gibi bir yolu doğru şekilde yorumlayabildi (yine de /path/to/privatekey gibi mutlak bir yolu yorumlayabilir).

Bkz. commit 8d15496 ((20 Temmuz 2017) Junio ​​C Hamano (gitster) .
Yardımlı: Charles Bailey (hashpling) .
(Tarafından birleştirildi Junio ​​C Hamano - gitster - in commit 17b1e1d , 11 Ağu 2017)

http.c: http.sslcert ve http.sslkey her ikisi de yol

Modern http_options () codepath'ı ayrıştırmak için yaratıldığında. 29508e1 ("Paylaşılan HTTP iste işlevselliğini yalıt", 2005-11-18, Git 0.99.9k) adresindeki çeşitli http. 7059cd9 .__ 'daki çoklu konfigürasyon dosyaları arasındaki etkileşim. ("http_init(): config dosya ayrıştırmayı düzelt", 2009-03-09, Git 1.6.3-rc0), biz .. http.sslkey, http.sslcert gibi yapılandırma değişkenleri düz Vanilya dizeleri, çünkü git_config_pathname() bu anlama geliyor. "~[username]/" öneki yoktu. 

Daha sonra, işlevi kullanmak için bir kısmını (yani, http.sslCAPath ve http.sslCAInfo) dönüştürdük ve işlevi en baştan kullanmak için http.cookeyFilehttp.pinnedpubkey gibi değişkenler ekledik. Bu nedenle, bu değişkenlerin tümü "~[username]/" önekini anlar.

Kalan iki değişkeni yapın, http.sslcert ve http.sslkey, ayrıca konvansiyonun farkında, çünkü ikisi de açıkça Dosyalar.

2
VonC

.gitconfig dosyasına, kendinden imzalı sertifikayı kabul edilebilir kılmak için aşağıdaki değeri ekleyebilirsiniz

sslCAInfo = /home/XXXX/abc.crt

Windows'ta bu benim için çalıştı:

Kendinden imzalı sertifikanızın içeriğini ca-bundle dosyasının sonuna ekleyin. ----- BEGIN BELGESİ ----- ve ----- SON BELGESİ ----- satırları dahil

ca-bundle dosyasının konumu genellikle C:\Program Files\Git\mingw64\ssl\certs

Daha sonra, ca-bundle dosyasının yolunu global git config'e ekleyin. Aşağıdaki komut hile yapar: git config --global http.sslCAInfo "C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt"

Not: Yol, ca-bundle dosyasının yerel yoluna bağlıdır!

1
rw026

Git’in Windows’taki 64 bit sürümünü kullanarak, kendinden imzalı CA sertifikasını şu dosyalara eklemeniz yeterlidir:

  • C:\Program Dosyaları\Git\mingw64\ssl\certs\ca-bundle.crt 
  • C:\Program Dosyaları\Git\mingw64\ssl\certs\ca-bundle.trust.crt

Bu sadece bir sunucu kendinden imzalı bir sertifika ise, onu ekleyin

  • C:\Program Dosyaları\Git\mingw64\ssl\cert.pem
1
Flaviu

Cevabım gecikmiş olabilir ama benim için işe yaradı. Birine yardım edebilir.

Yukarıda belirtilen adımları denedim ve bu sorunu çözmedi.

bunu dene git config --global http.sslVerify false

0
Manjuboyz

Ben bir windows makinesi kullanıyorum ve bu makale bana yardımcı oldu. Temel olarak ca-bundle.crt dosyasını not defterinde açtım ve içine zincir sertifikaları ekledim (hepsine). Bu sorun genellikle orta erkeklerin sistemle git repo arasında oturan şirket ağlarında olur. 64 no'lu bodrum katmanı hariç tüm cer zincirindeki tüm cerları dışa aktarmamız ve hepsini ca-bundle.crt dosyasına eklememiz ve sonra bu değiştirilmiş crt dosyası için git'i yapılandırmamız gerekiyor.

0
love gupta

Böyle yapıyorum:

git init
git config --global http.sslVerify false
git clone https://myurl/myrepo.git
0
JedatKinports