सर्वर प्रमाणपत्र सत्यापन विफल। CAfile: /etc/ssl/certs/ca-certports.crt CRLfile: कोई नहीं


334

मैं ssh का उपयोग करके क्लोन प्रोजेक्ट द्वारा पुश कर सकता हूं, लेकिन जब मैं https के साथ प्रोजेक्ट क्लोन करता हूं तो यह काम नहीं करता है।

त्रुटि संदेश जो मुझे दिखाता है वह है:

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

जवाबों:


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"

लंबा जवाब

मूल कारण यह है कि आपका कंप्यूटर उस सर्टिफिकेट अथॉरिटी पर भरोसा नहीं करता है , जिसने Gitlab सर्वर पर इस्तेमाल किए गए सर्टिफिकेट पर हस्ताक्षर किए हैं । इसका मतलब यह नहीं है कि प्रमाणपत्र संदेहास्पद है, लेकिन यह किसी संस्था / कंपनी द्वारा स्व-हस्ताक्षरित या हस्ताक्षरित किया जा सकता है जो आपके ओएस की सीए की सूची में नहीं है। आपके कंप्यूटर पर समस्या को दरकिनार करने के लिए आपको क्या करना है यह उस प्रमाणपत्र पर भरोसा करने के लिए कह रहा है - अगर आपके पास इसके बारे में संदेह करने का कोई कारण नहीं है।

आपको अपने gitLab सर्वर के लिए उपयोग किए जाने वाले वेब प्रमाणपत्र की जांच करने की आवश्यकता है, और इसे अपने साथ जोड़ें </git_installation_folder>/bin/curl-ca-bundle.crt

यह जांचने के लिए कि कम से कम क्लोन ने कहा कि प्रमाण पत्र की जांच के बिना , आप सेट कर सकते हैं:

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

लेकिन यह केवल परीक्षण के लिए होगा, जैसा कि " एसएसएल ब्राउज़र, विगेट और कर्ल के साथ काम करता है, लेकिन जीआईटी के साथ विफल रहता है " या इस ब्लॉग पोस्ट में सचित्र है ।

अपनी GitLab सेटिंग्स की जाँच करें, अंक 4272 में


वह प्रमाणपत्र प्राप्त करने के लिए (जिसमें आपको अपनी curl-ca-bundle.crtफ़ाइल में जोड़ना होगा ), टाइप करें:

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

(' yourserver.com' आपके GitLab सर्वर का नाम होने के साथ , और YourHttpsGitlabPortआमतौर पर https पोर्ट है 443)

CA (प्रमाणपत्र प्राधिकरण जारीकर्ता) की जाँच करने के लिए, एक टाइप करें:

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

नोट: वेलेरी कटकोव ने ओपनसेल कमांड में विकल्प जोड़ने के लिए टिप्पणियों में सुझाव -servernameदिया है, अन्यथा वेलेरी के मामले में कमांड को www.github.com के लिए प्रमाण पत्र नहीं दिखाया गया है।

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

Findekano टिप्पणियों में जोड़ता है :

के स्थान की पहचान करने के लिए curl-ca-bundle.crt, आप कमांड का उपयोग कर सकते हैं

curl-config --ca

इसके अलावा, मेरे और हालिया उत्तर " github: सर्वर प्रमाणपत्र सत्यापन विफल " देखें: आपको उन प्रमाणपत्रों का नाम बदलना पड़ सकता है:

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
क्या मूल संदेश यह नहीं दर्शाता है कि प्रमाणपत्र को कहां जोड़ा जाए? मेरे मामले में curl-config --caवापस आ गया /etc/ssl/certs/ca-certificates.crt, जो मुझे प्रमाण पत्र जोड़ना था। इसके अलावा यह जवाब इस मुद्दे के साथ मुझे सही दिशा में इंगित करने वाली पहली जानकारी थी
uli_1973

1
आप git स्थापित फ़ोल्डर कैसे खोजते हैं?
भार्गव

1
@ भार्गव यह आपके ओएस पर निर्भर करता है। लिनक्स पर, आप कर सकते हैं which git
VonC

3
मैं भागा curl-config --ca, लेकिन कुछ भी नहीं लौटाया गया।
फर्नांडो कोस्टा

1
टिप के लिए धन्यवाद - आपने मेरा दिन बचाया।
Janne

220

नोट: इसके प्रमुख सुरक्षा निहितार्थ हैं।

अपना टर्मिनल खोलें और निम्न आदेश चलाएँ:

export GIT_SSL_NO_VERIFY=1

यह मेरे लिए काम करता है और मैं लिनक्स सिस्टम का उपयोग कर रहा हूं।


60
डाउनवोटिंग नहीं, क्योंकि जब आप जानते हैं कि आप क्या कर रहे हैं तो यह एक समाधान है। हालांकि, सामान्य मामले में इसके खिलाफ दृढ़ता से अनुशंसा करते हैं।
त्रिकाल

9
मैं यह नहीं कहूंगा कि जब आप जानते हैं कि आप क्या कर रहे हैं। जब आप जानते हैं कि आप क्या कर रहे हैं, तो आपको "शायद किसी ने हमें हैक किया है" के रूप में विफल होने वाले प्रमाण पत्र को देखना चाहिए "ओह अच्छी तरह से सुरक्षा का कहना है कि किसी ने हमें हैक किया है, अनुमान है कि हमें सुरक्षा को अक्षम करने की आवश्यकता है।" यह सबसे अच्छा एक स्टॉपगैप उपाय है यदि कुछ को धक्का दिए जाने की आवश्यकता है।
srcspider

1
झंडे के ऊपर निर्यात करने से मैं नीचे त्रुटि प्राप्त करता हूं। परिणाम = 22, HTTP कोड = 403 घातक: दूरस्थ अंत अप्रत्याशित रूप से त्रुटि हुई: RPC विफल; परिणाम = 22, HTTP कोड = 403 घातक: दूरस्थ अंत अप्रत्याशित रूप से लटका हुआ है
देसू

7
केवल मेरे साथ काम कियाgit config --global http.sslverify false
18

2
महान। आपने मेरा समय बचाया।
साई प्रणीत

146

इस समस्या का एक और कारण यह हो सकता है कि आपकी घड़ी बंद हो सकती है। प्रमाणपत्र समय के प्रति संवेदनशील हैं।

वर्तमान सिस्टम समय की जांच करने के लिए:

date -R

आप एनटीपी को वैश्विक एनटीपी पूल से विश्वसनीय इंटरनेट टाइमवेर्स के साथ सिस्टम समय को स्वचालित रूप से सिंक करने के लिए स्थापित करने पर विचार कर सकते हैं । उदाहरण के लिए, डेबियन / उबंटू पर स्थापित करने के लिए:

apt-get install ntp

5
यह मेरी समस्या थी। मेरा विश्वविद्यालय ntp पैकेट्स को अवरुद्ध कर रहा था, जो कि मेरे सिस्टम को समय अपडेट करने से रोक रहा था। एक बार जब मैंने विश्वविद्यालय एनटीपी सर्वर को कॉन्फ़िगर किया तो चीजें फिर से काम कर रही थीं। इस टिप के लिए धन्यवाद!
काइल

3
यह भी मेरी समस्या का कारण था, मैं एक एम्बेडेड डिवाइस का उपयोग कर रहा था जिसमें गलत तारीख थी!
शेरविन इमामी

यह मेरी समस्या थी, अनाज के साथ। मैंने यह पता लगाने से पहले कि सभी प्रकार के समाधानों को देखने में घंटों बिताए हैं, समस्या यह थी कि सर्वर घड़ी को भविष्य में सेट किया जा रहा था। हालांकि, इससे मुझे Node.js की भविष्य में रिलीज़ करने में मदद नहीं मिली। :-(
केविन तेलजेउर

1
@ केतु यह gitप्रति कहना नहीं है , यह अंतर्निहित एसएसएल एक्सचेंज है। Git SSL सपोर्ट के साथ बनाया गया है।
यवन

1
मैं इस 10000 बार बढ़ाऊंगा .... देख रहा था कि अब पूरे 6 घंटे काम क्यों नहीं किया ... सर्वर 7 मिनट से कम समय के लिए बंद हो गया और इसने यह चाल चली ... धन्यवाद!
dGo

66

यदि आप एक निजी नेटवर्क के अंदर एक git सर्वर का उपयोग कर रहे हैं और एक स्व-हस्ताक्षरित प्रमाण पत्र या एक IP पते पर एक प्रमाण पत्र का उपयोग कर रहे हैं; आप ssl जाँच को निष्क्रिय करने के लिए बस git ग्लोबल कॉन्फिग का उपयोग कर सकते हैं:

git config --global http.sslverify "false"

43

एक ही समस्या थी। स्व जारी प्रमाण पत्र प्राधिकारी द्वारा कारण। .Pem फ़ाइल को / usr / स्थानीय / शेयर / सीए-प्रमाणपत्र / और कॉल में जोड़कर इसे हल किया

sudo update-ca-certificates

PS: pem फाइल फोल्डर में ./share/ca-certports MUST में एक्सटेंशन .crt है


2
लिनक्स टकसाल 16 में एक आकर्षण की तरह काम किया :)
greuze

क्या आपका मतलब है सर्टिफिकेट। सर्म या सर्टिफिकेट। सर्टिफिकेट या सर्टिफिकेट।
मूसा लियाओ जीजेड

1
cert.pem का नाम बदलकर cert.pem.crt कर दिया जाना चाहिए
निकोले

34

अपने सिस्टम की घड़ी देखें,

$ date

यदि यह सही नहीं है तो प्रमाणपत्र की जांच विफल हो जाएगी। सिस्टम क्लॉक को सही करने के लिए,

$ apt-get install ntp

घड़ी को खुद को सिंक्रनाइज़ करना चाहिए।

अंत में फिर से क्लोन कमांड दर्ज करें।


1
हाँ! मुझे एक लंबे समय के लिए वर्चुअलबॉक्स में उबंटू को निलंबित करने का एक उदाहरण मिला। जब मैंने अनसेफ किया तो सिस्टम क्लॉक को किसी भी कारण से सिंक नहीं किया गया। VonC का जवाब ज्ञानवर्धक लगता है, लेकिन मुझे वास्तव में खुशी है कि मुझे सुरक्षा आदेशों का एक समूह नहीं चलाना है जो मुझे समझ नहीं आ रहा है। यह पहले जांचें!
एंडीजॉस्ट

24
GIT_CURL_VERBOSE=1 git [clone|fetch]…

आपको बताना चाहिए कि समस्या कहां है। मेरे मामले में यह NSS के खिलाफ निर्मित होने पर PEM प्रमाणपत्रों का समर्थन नहीं करने के कारण था, उस समर्थन के कारण NSS ( # 726116 # 804215 # 402712 और अधिक ) में मेनलाइन नहीं था ।


4
के साथ अच्छा जोड़ा GIT_CURL_VERBOSE। मैंने अपने उत्तर में इसका उल्लेख नहीं किया। +1
वॉनच

18

या सर्वर सर्टिफिकेट को अपने डेटाबेस में जोड़ने के लिए बस यह टिप्पणी चलाएं:

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

फिर फिर से क्लोन क्लोन करें।


1
मुझे नहीं पता कि यह किसी के लिए भी काम करता है, लेकिन मुझे सर्टिफिकेट फ़ाइल को रूट के रूप में जोड़ने के लिए "टी" की आवश्यकता है: इको-एन | Opensl s_client -showcerts -connect yourserver.com:443 2> / dev / null | sed -ne '/ -BEGIN CERTIFICATE - /, / - END CERTIFICATE- / p' | सुडो टी-ए /etc/ssl/certs/ca-certports.crt
ywu

मेरे मामले में, सर्वर के पास एक वैध प्रमाण पत्र है, लेकिन मेरे डेटाबेस में यह शामिल नहीं है, इस आदेश के साथ मैंने हल किया लेकिन मुझे यह कहना होगा कि इस आदेश को रूट विशेषाधिकारों के साथ चलाया जाना चाहिए।
उपरत्न

10

मैंने अपनी सीए फाइलों के साथ गड़बड़ कर दी, जबकि मैंने गुगली प्रॉक्सी को सेटअप किया। गिटहब से डेटा नहीं खींच सकते, और एक ही चेतावनी प्राप्त कर सकते हैं:

सर्वर प्रमाणपत्र सत्यापन विफल। CAfile: /etc/ssl/certs/ca-certports.crt CRLfile: कोई नहीं

वॉनक की विधि का उपयोग करें, जीथब से प्रमाण पत्र प्राप्त करें, और इसे /etc/ssl/certs/ca-certports.crt में डालें, समस्या हल हो गई।

इको-एन | Opensl s_client -showcerts -connect github.com:443 2> / dev / null | sed -ne '/ -BEGIN CERTIFICATE - /, / - END प्रमाण पत्र- / p'


8

झूठी सेट करने के लिए git ssl सत्यापन सेट करने की कोई आवश्यकता नहीं है। यह तब होता है जब सिस्टम के पास सभी CA प्राधिकरण प्रमाणपत्र नहीं होते हैं। ज्यादातर लोग जिनके पास वास्तविक एसएसएल सर्टिफिकेट है, वे इंटरमीडिएट सर्टिफिकेट को मिस कर रहे हैं।

सिर्फ इंटरमीडिएट सर्टिफिकेट (गुम सीए और इंटरमीडिएट सर्टिफिकेट की पूरी श्रृंखला) का पूरा पाठ जोड़ना

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

बिना चलाए काम करता है update-ca-certificates

वही मैन्युअल रूप से जेनरेट किए गए प्रमाणपत्रों के लिए जाता है, बस CA प्रमाणपत्र पाठ जोड़ें।

अंत में: सफल पुश: सब कुछ अप-टू-डेट है


1
यदि सभी SSL CA श्रृंखला के साथ सर्वर ठीक से कॉन्फ़िगर नहीं किया गया है तो समान कारण हो सकता है।
abcdef12

चेन इश्यू कारण हो सकते हैं, क्योंकि abcdef12 ने टिप्पणी की है। मुझे 1.9.1 के साथ यह समस्या थी - सर्वर सर्टिफिकेट चेन भेज रहा था: # 0 सर्वर सर्टिफिकेट; # 1 सर्वर प्रमाणपत्र (फिर से); # 2 हस्ताक्षरकर्ता प्रमाण पत्र। श्रृंखला में डुप्लिकेट कारण git यह पसंद नहीं था।
20

8

टर्मिनल में इस समस्या को हल करने के लिए मैंने क्या किया (Ubuntu 18.04):

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

मुझे सर्टिफिकेट के दो हिस्से मिले। और मैंने अपने सर्टिफिकेट फाइल में सर्टिफिकेट चंक्स कॉपी किया /etc/ssl/certs/ca-certificates.crt


यह समाधान Ubuntu 16.04 में मेरी समान समस्या को हल करता है।
user3072843

वास्तव में सर्टिफिकेट विखंडू से आपका क्या अभिप्राय है ? के बीच ---BEGIN CERTIFICATE---और ब्लॉक --- END CERTIFICATE ---?
बी - रिआन

3

मैंने एक रास्पबेरी पी 2 पर ज़ुबंटू को स्थापित किया, समय के साथ एक ही मुद्दा मिला, क्योंकि एनटीपी और स्वचालित सर्वर सिंक बंद था (या स्थापित नहीं था)। NTP जाओ

sudo apt-get install ntp

और "समय और दिनांक" को "मैनुअल" से "इंटरनेट सर्वर के साथ सिंक्रनाइज़ रखें" में बदलें


1

आखिरकार, अपने .it / config में http.sslverify जोड़ें।

[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
कमांड लाइन का उपयोग करने के लिए बेहतर है git config http.sslVerify false। क्या आप प्रति-रिपॉजिटरी आधार पर Git config को संपादित करने का सुझाव दे रहे हैं, न कि विश्व स्तर पर @ romain-vdk द्वारा सुझाए गए अनुसार?
एहोजेन

1

पहली चीज़ जो आपको जांचनी चाहिए, वह है फ़ाइल अनुमति /etc/sslऔर /etc/ssl/certs

मैंने अपने प्रमाणपत्र प्राधिकरण प्रबंधन उपकरण पर काम करते समय समूह के नाम / आईडी rm -rf /etc/ssl/*का उपयोग करते समय फ़ाइल अनुमतियों को हटाने (या एसएसएल निर्देशिकाओं को उड़ाने ) की गलती की ।ssl-cert

यह तब था जब मैंने wgetऔर curlCLI ब्राउज़र टूल के लिए सटीक त्रुटि संदेश देखा था :

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

एक बार जब मैं /etc/sslऔर /etc/ssl/certनिर्देशिका की फ़ाइल अनुमति ले आया o+rx-w, तो उन सीएलआई ब्राउज़र टूल्स ने थोड़ी आसानी से सांस लेना शुरू कर दिया:

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

मुझे जावा उपनिर्देशिका को फिर से बनाना पड़ा और ट्रस्टेड सीए प्रमाणपत्र निर्देशिकाओं का पुनर्निर्माण करना पड़ा:

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

और तट साफ था।


0

मुझे सिर्फ एक गिट रिपॉजिटरी के साथ एक ही समस्या का सामना करना पड़ा जो हमेशा मेरे लिए काम करती है। समस्या यह थी कि मैंने इसे सार्वजनिक वाईफाई एक्सेस के माध्यम से एक्सेस किया, जो पहले कनेक्शन पर एक कैप्टिव पोर्टल पर रीडायरेक्ट करता है (उदाहरण के लिए विज्ञापन दिखाने और tos से सहमत होने के लिए)।


0

प्रमाण पत्र और बंडल को एक .crt फ़ाइल में कॉपी करें और सुनिश्चित करें कि फ़ाइल में प्रमाणपत्रों के बीच एक रिक्त रेखा है।

इंटरनेट पर सब कुछ आज़माने के बाद इसने मेरे लिए GitLab सर्वर पर काम किया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.