sunucu sertifikası doğrulanamadı. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: yok


334

Ssh kullanarak klon projesini zorlayabilirim, ancak https ile projeyi klonladığımda işe yaramıyor.

Beni gösteren hata mesajı:

server certificate verification failed. CAfile: /etc/ssl/certs/cacertificates.crt CRLfile: none

Yanıtlar:


422

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"

Uzun cevap

Bunun temel nedeni bilgisayarınızın Gitlab sunucusunda kullanılan sertifikayı imzalayan sertifika yetkilisine güvenmemesidir . Bu, sertifikanın şüpheli olduğu anlamına gelmez, ancak işletim sisteminizin CA'lar listesinde yer almayan bir kurum / şirket tarafından otomatik olarak imzalanabilir veya imzalanabilir. Bilgisayarınızdaki sorunu atlatmak için yapmanız gereken şey bu sertifikaya güvenmesini söylüyor - bu konuda şüphelenmek için bir nedeniniz yoksa.

GitLab sunucunuz için kullanılan web sertifikasını kontrol etmeniz ve sunucunuza eklemeniz gerekir </git_installation_folder>/bin/curl-ca-bundle.crt.

En azından klonun söz konusu sertifikayı kontrol etmeden çalışıp çalışmadığını kontrol etmek için şunları ayarlayabilirsiniz:

export GIT_SSL_NO_VERIFY=1
#or
git config --global http.sslverify false

Ancak bu, " SSL tarayıcı, wget ve curl ile çalışır, ancak git ile başarısız olur " veya bu blog gönderisinde gösterildiği gibi yalnızca test amaçlıdır .

Daki GitLab ayarları, kontrol sorunu 4272 .


Bu sertifikayı almak için ( curl-ca-bundle.crtdosyanıza eklemeniz gerekir ), şunu yazın:

echo -n | openssl s_client -showcerts -connect yourserver.com:YourHttpsGitlabPort \
  2>/dev/null  | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'

(' yourserver.com' GitLab sunucu adınızdır ve YourHttpsGitlabPortgenellikle https bağlantı noktasıdır 443)

CA'yı (Sertifika Yetkilisi yayıncısı) kontrol etmek için aşağıdakileri yazın:

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

Not: Valeriy Katkov yorumlarda-servername openssl komutuna seçenek eklemeyi önerir , aksi takdirde komut Valeriy'nin durumunda www.github.com sertifikasını göstermez.

openssl s_client -showcerts -servername www.github.com -connect www.github.com:443

Findekano ekler yorumlarda :

konumunu tanımlamak için curl-ca-bundle.crtşu komutu kullanabilirsiniz:

curl-config --ca

Ayrıca, daha yeni yanıtım olan " github: sunucu sertifikası doğrulaması başarısız oldu " ifadesine bakın: bu sertifikaları yeniden adlandırmanız gerekebilir:

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

8
Orijinal mesaj sertifikanın nereye ekleneceğini göstermiyor mu? Benim durumumda , sertifikayı eklemek zorunda olduğum yer curl-config --cageri döndü /etc/ssl/certs/ca-certificates.crt. Bunun dışında bu cevap beni bu konuda doğru yönde gösteren ilk
bilgiydi

1
Git install klasörünü nasıl buldunuz?
Bhargav

1
@Bhargav işletim sisteminize bağlıdır. Linux'ta bir which git.
VonC

3
Koştum curl-config --caama hiçbir şey geri verilmedi.
Fernando Costa

1
Bahşiş için teşekkürler - günümü kurtardın.
Janne

220

Not: Bunun önemli güvenlik etkileri vardır.

Terminalinizi açın ve aşağıdaki komutu çalıştırın:

export GIT_SSL_NO_VERIFY=1

Benim için çalışıyor ve Linux sistemini kullanıyorum.


60
Aşağı oy kullanmıyorsunuz çünkü ne yaptığınızı bildiğinizde bir çözüm var. Bununla birlikte, genel durumda buna şiddetle karşı çıkın.
üçlü

9
Ne yaptığını bildiğinde bunun bir çözüm olduğunu söyleyemem. Ne yaptığınızı bildiğinizde "belki birisi bizi hackledi" değil, başarısız olan bir sertifikaya bakmalısınız. Bir şeyin en kısa zamanda itilmesi gerekiyorsa en iyi ihtimalle bir durma ölçüsüdür.
srcspider

1
yukarıdaki bayrağı dışa aktararak i error.error: RPC başarısız oldu; sonuç = 22, HTTP kodu = 403 ölümcül: Uzak uç beklenmedik bir şekilde kapatıldı hata: RPC başarısız oldu; sonuç = 22, HTTP kodu = 403 ölümcül: Uzak uç beklenmedik bir şekilde
Desu

8
Sadece benim için çalıştıgit config --global http.sslverify false
Dinei

2
Harika. Zamanımı kurtardın.
Sai prateek

146

Bu sorunun bir başka nedeni de saatinizin kapalı olması olabilir. Sertifikalar zaman duyarlıdır.

Geçerli sistem saatini kontrol etmek için:

date -R

Sistem saatini, genel NTP havuzundan güvenilir internet zaman sunucularıyla otomatik olarak eşitlemek için NTP'yi yüklemeyi düşünebilirsiniz . Örneğin, Debian / Ubuntu'ya kurmak için:

apt-get install ntp

5
Bu benim sorunumdu. Üniversitem ntp paketlerini engelliyordu, bu da sistemimin zamanını güncellemesini engelliyordu. Üniversite ntp sunucularını yapılandırdıktan sonra işler tekrar çalışıyordu. Bu ipucu için teşekkürler!
Kyle

3
Bu da sorunumun nedeniydi, yanlış tarihe sahip gömülü bir cihaz kullanıyordum!
Shervin Emami

Bu benim certs ile olan sorunumdu. Sorunun sunucu saatinin geleceğe ayarlandığını keşfetmeden önce her türlü çözüme bakarak saatler geçirdim. Ancak, Node.js'nin gelecekteki bir sürümünü almama yardımcı olmadı. :-(
Kevin Teljeur

1
@Katu gither söze göre değil, temel SSL değişimi. Git SSL desteği ile oluşturulmuştur.
Yvan

1
Ben bu 10000 kez upvote .... neden şimdi 6 saat boyunca işe yaramadı arıyorlardı ... Sunucu 7 dakikadan az bir süre kapalı idi ve bu hile yaptı ... TEŞEKKÜRLER!
dGo

66

Özel bir ağ içinde git sunucusu kullanıyorsanız ve kendinden imzalı bir sertifika veya IP adresi üzerinden bir sertifika kullanıyorsanız; ssl denetimlerini devre dışı bırakmak için git global config komutunu da kullanabilirsiniz:

git config --global http.sslverify "false"

43

Aynı sorun vardı. Kendi kendine verilen sertifika yetkilisi tarafından. İçin .pem dosyasını ekleyerek çözüldü / usr / local / share / ca-sertifikalar / ve çağrı

sudo update-ca-certificates

PS: ./share/ca-certificates klasöründeki pem dosyasının uzantısı .crt olmalıdır ZORUNLU


2
Linux nane 16 :) bir cazibe gibi çalıştı
greuze

Bunu mu demek istediniz: cert.pem veya cert.crt veya cert.pem.crt
Moses Liao GZ

1
cert.pem, cert.pem.crt olarak yeniden adlandırılmalıdır
Nikolay Ruban

34

Sistem saatinizi kontrol edin,

$ date

Doğru değilse, sertifika denetimi başarısız olur. Sistem saatini düzeltmek için,

$ apt-get install ntp

Saat kendini senkronize etmelidir.

Son olarak klon komutunu tekrar girin.


1
Evet! Ben uzun bir süre VirtualBox askıya Ubuntu bir örneği vardı. Sistem saati, askıya alınmadığımda herhangi bir nedenle senkronize olmadı. VonC'nin cevabı bilgili görünüyor, ama anlamadığım bir grup güvenlik komutunu çalıştırmak zorunda olmadığım için gerçekten memnunum. Önce bunu kontrol et!
AndyJost

24
GIT_CURL_VERBOSE=1 git [clone|fetch]…

sorunun nerede olduğunu söylemeliyim. Benim durumumda, cURL'nin NSS'ye karşı inşa edildiğinde PEM sertifikalarını desteklememesi nedeniyle, bu desteğin NSS'de ana hat olmaması nedeniyle ( # 726116 # 804215 # 402712 ve daha fazlası ).


4
İle güzel bir ek GIT_CURL_VERBOSE. Cevabımda bahsetmedim. +1
VonC

18

Veya sunucu sertifikasını veritabanınıza eklemek için bu yorumu çalıştırı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

Sonra tekrar klonla git.


1
Bu kimse için çalışıyorsa bilmiyorum ama "c" "cert dosyasını root olarak eklemek gerekir: echo -n | openssl s_client -showcerts -connect yourserver.com:443 2> / dev / null | sed -ne '/ -BEGIN BELGESİ - /, / - SON SERTİFİKASI- / p' | sudo tee -a /etc/ssl/certs/ca-certificates.crt
ywu

Benim durumumda, sunucunun geçerli bir sertifikası var, ancak veritabanım bunu içermiyor, bu komutla çözdüm ama bu komutun kök ayrıcalıklarıyla çalıştırılması gerektiğini söylemeliyim.
hermeslm

10

Goagent proxy'yi kurarken CA dosyalarımla uğraştım. Github'dan veri çekilemiyor ve aynı uyarı alınamıyor:

sunucu sertifikası doğrulanamadı. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: yok

Vonc yöntemini kullanın, sertifikayı github'dan alın ve /etc/ssl/certs/ca-certificates.crt içine koyun, sorun çözüldü.

echo -n | openssl s_client -showcerts -connect github.com:443 2> / dev / null | sed -ne '/ -BEGIN BELGESİ - /, / - SON SERTİFİKASI- / p'


8

false olarak ayarlamak için git ssl doğrulamasını ayarlamanıza gerek yoktur. Sistemin tüm CA yetki sertifikalarına sahip olmaması nedeniyle oluşur. Çoğunlukla orijinal SSL sertifikası olan kişiler ara sertifikayı kaçırırlar.

Sadece ara sertifikanın tam metnini (eksik CA ve ara sertifikanın tüm zinciri)

sudo gedit /etc/ssl/certs/ca-certificates.crt 

çalıştırmadan çalışır update-ca-certificates.

Manuel olarak oluşturulan sertifikalar için de aynı şey geçerlidir, CA sertifika metnini eklemeniz yeterlidir.

Sonunda: İtme başarılı: Her şey güncel


1
Sunucu tüm SSL CA zinciriyle düzgün yapılandırılmamışsa da buna neden olabilir.
abcdef12

Zincir sorunları, abcdef12'nin yorumladığı gibi olabilir. Git 1.9.1 ile bu sorunu vardı - sunucu cert zincirini gönderiyordu: # 0 server cert; # 1 sunucu sertifikası (tekrar); # 2 İmzalayan sertifikası. Zincirin kopyası, git'in hoşlanmadığı nedendi.
jah

8

Terminalde bu sorunu çözmek için ne yaptım (Ubuntu 18.04):

openssl s_client -showcerts -servername www.github.com -connect www.github.com:443

İki tane sertifika parçası aldım. Sertifika yığınlarını sertifika dosyama kopyaladım /etc/ssl/certs/ca-certificates.crt.


Bu çözüm, Ubuntu 16.04'teki özdeş sorunumu çözdü.
user3072843

Sertifika parçaları ile tam olarak ne demek istiyorsun ? Arasındaki blok ---BEGIN CERTIFICATE---ve --- END CERTIFICATE ---?
B - rian

3

Xubuntu'yu bir Raspberry pi 2'ye yükledim, NTP ve Otomatik Sunucu senkronizasyonu kapalı (veya yüklü değil) ile aynı sorunu buldum. NTP edinin

sudo apt-get install ntp

ve "Saat ve Tarih" i "Manuel" olarak "İnternet Sunucuları ile senkronize tut" olarak değiştirin


1

Sonunda, http.sslverify dosyasını .git / config dosyasına ekleyin.

[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

1
Komut satırını kullanmak daha iyidir git config http.sslVerify false. Git yapılandırmasını @ romain-vdk tarafından önerildiği gibi global değil, havuz başına düzenlemeyi mi öneriyorsunuz?
ahogen

1

Eğer kontrol gereken ilk şey dosya iznidir /etc/sslve /etc/ssl/certs.

Sertifika Yetkilisi Yönetim Aracı üzerinde çalışırken grup adını / kimliğini kullanırken dosya izinlerini bırakma (veya SSL rm -rf /etc/ssl/*dizinlerini havaya uçurma) hatasını yaptımssl-cert .

O zaman ben de aynı hata mesajı wgetve curlCLI tarayıcı araçları fark ettim :

server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

/etc/sslVe /etc/ssl/certdizinlerin dosya iznini getirdikten sonra o+rx-w, bu CLI tarayıcı araçları biraz daha kolay nefes almaya başladı:

mkdir -p /etc/ssl/certs
chmod u+rwx,go+rx /etc/ssl /etc/ssl/certs

Ayrıca Java alt dizinini yeniden oluşturmak ve Güvenilen CA sertifika dizinlerini yeniden yapılandırmak zorunda kaldım:

mkdir /etc/ssl/certs/java
chmod u+rwx,go+rx /etc/ssl/certs/java
update-ca-certificates

ve sahil açıktı.


0

Ben sadece hep benim için çalışan bir git deposu ile aynı sorunla karşılaştı. Sorun, ilk bağlantıda (örneğin reklamları göstermek ve tos ile anlaşmak için) tutsak bir portala yönlendiren genel WiFi erişimi aracılığıyla erişmemdi.


0

Sertifikayı ve paketi bir .crt dosyasına kopyalayın ve dosyadaki sertifikalar arasında boş bir satır olduğundan emin olun.

Bu, Internet'teki her şeyi denedikten sonra benim için bir GitLab sunucusunda çalıştı.

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.