किसी विशेष https रिमोट के लिए एक विशेष रूप से स्व-हस्ताक्षरित सर्वर प्रमाणपत्र को स्वीकार करने के लिए Git कॉन्फ़िगर करें


167

एक परियोजना के लिए sysadmin मैं पर फैसला किया है कि SSH "बहुत अधिक परेशानी" है; इसके बजाय, उन्होंने एक https://URL (और उपयोगकर्ता नाम / पासवर्ड प्रमाणीकरण) के माध्यम से सुलभ होने के लिए Git की स्थापना की है । इस URL का सर्वर एक स्व-हस्ताक्षरित प्रमाणपत्र प्रस्तुत करता है, इसलिए उन्होंने सभी को प्रमाणपत्र सत्यापन बंद करने की सलाह दी। यह मुझे एक अच्छे सेटअप, सुरक्षा-वार के रूप में हड़ताल नहीं करता है।

क्या Git को यह बताना संभव है कि दूरस्थ X (या बेहतर, किसी भी रिपॉजिटरी में किसी भी दूरस्थ के साथ जो शुरू होता है https://$SERVERNAME/) के लिए यह एक विशेष प्रमाणपत्र और केवल उस प्रमाणपत्र को स्वीकार करना है ? मूल रूप से SSH के सर्वर-कुंजी व्यवहार को फिर से परिभाषित करें।


आप यूनिक्स पर सी गिट के बारे में पूछ रहे हैं, मुझे लगता है?
पिओटर फाइंडसेन

हाँ। ठीक है, बोधगम्य भी विंडोज, लेकिन अभी किसी का नहीं कर रहा है।
1

5
WTF? @Zack आप प्रमाणपत्र जाँच के बारे में पूर्ण अधिकार हैं। जब आपका व्यवस्थापक कहता है कि आपको सर्टिफिकेट चेक बंद कर देना चाहिए, तो वह सर्वर पर टीएलएस को भी बंद कर सकता है, तब से हर एक आदमी के बीच के हमले के खिलाफ सुरक्षा को अक्षम कर रहा है।
रूडी

@ रुडी, क्या यह अभी भी मामला है अगर वे सर्वर तक पहुंचने के लिए आईपी पते का उपयोग करते हैं? (ऐसा लगता है कि DNS लुकअप है कि MITM कैसे इनबिल्ट हो जाता है, इसलिए मुझे लगता है कि IP पता इस के लिए प्रतिरक्षा होना चाहिए।)
क्रिस

6
@ क्रिस हाँ, यह अभी भी मामला है। एक MITM राउटर किसी भी आईपी पते को चाहने का दिखावा कर सकता है। (आप उन अंतर्राज्यीय पृष्ठों को जानते हैं जो आपको हवाई अड्डे में मुफ्त वाईफाई पर मिलते हैं। वे एमआईटीएम हैं। कभी-कभी आईपी पते द्वारा एक पृष्ठ तक पहुंचने का प्रयास करें।)
zwol

जवाबों:


295

संक्षेप में:

  1. स्व हस्ताक्षरित प्रमाण पत्र प्राप्त करें
  2. इसे कुछ (जैसे ~/git-certs/cert.pem) फ़ाइल में डालें
  3. पैरामीटर gitका उपयोग करके इस प्रमाणपत्र पर भरोसा करने के लिए सेट करेंhttp.sslCAInfo

अधिक जानकारी में:

दूरस्थ सर्वर के स्व हस्ताक्षरित प्रमाण पत्र प्राप्त करें

मान लें, सर्वर URL है repos.sample.comऔर आप इसे पोर्ट पर एक्सेस करना चाहते हैं 443

कई विकल्प हैं, इसे कैसे प्राप्त करें।

Opensl का उपयोग करके प्रमाणपत्र प्राप्त करें

$ openssl s_client -connect repos.sample.com:443

आउटपुट को किसी फ़ाइल में कैद करें cert.pemऔर सभी (लेकिन सहित) -BEGIN CERTIFICATE-और () के बीच के हिस्से को हटा दें-END CERTIFICATE-

परिणामी फ़ाइल की सामग्री ~ / git-certs / cert.pem इस तरह दिख सकती है:

-----BEGIN CERTIFICATE-----
MIIDnzCCAocCBE/xnXAwDQYJKoZIhvcNAQEFBQAwgZMxCzAJBgNVBAYTAkRFMRUw
EwYDVQQIEwxMb3dlciBTYXhvbnkxEjAQBgNVBAcTCVdvbGZzYnVyZzEYMBYGA1UE
ChMPU2FhUy1TZWN1cmUuY29tMRowGAYDVQQDFBEqLnNhYXMtc2VjdXJlLmNvbTEj
MCEGCSqGSIb3DQEJARYUaW5mb0BzYWFzLXNlY3VyZS5jb20wHhcNMTIwNzAyMTMw
OTA0WhcNMTMwNzAyMTMwOTA0WjCBkzELMAkGA1UEBhMCREUxFTATBgNVBAgTDExv
d2VyIFNheG9ueTESMBAGA1UEBxMJV29sZnNidXJnMRgwFgYDVQQKEw9TYWFTLVNl
Y3VyZS5jb20xGjAYBgNVBAMUESouc2Fhcy1zZWN1cmUuY29tMSMwIQYJKoZIhvcN
AQkBFhRpbmZvQHNhYXMtc2VjdXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEP
ADCCAQoCggEBAMUZ472W3EVFYGSHTgFV0LR2YVE1U//sZimhCKGFBhH3ZfGwqtu7
mzOhlCQef9nqGxgH+U5DG43B6MxDzhoP7R8e1GLbNH3xVqMHqEdcek8jtiJvfj2a
pRSkFTCVJ9i0GYFOQfQYV6RJ4vAunQioiw07OmsxL6C5l3K/r+qJTlStpPK5dv4z
Sy+jmAcQMaIcWv8wgBAxdzo8UVwIL63gLlBz7WfSB2Ti5XBbse/83wyNa5bPJPf1
U+7uLSofz+dehHtgtKfHD8XpPoQBt0Y9ExbLN1ysdR9XfsNfBI5K6Uokq/tVDxNi
SHM4/7uKNo/4b7OP24hvCeXW8oRyRzpyDxMCAwEAATANBgkqhkiG9w0BAQUFAAOC
AQEAp7S/E1ZGCey5Oyn3qwP4q+geQqOhRtaPqdH6ABnqUYHcGYB77GcStQxnqnOZ
MJwIaIZqlz+59taB6U2lG30u3cZ1FITuz+fWXdfELKPWPjDoHkwumkz3zcCVrrtI
ktRzk7AeazHcLEwkUjB5Rm75N9+dOo6Ay89JCcPKb+tNqOszY10y6U3kX3uiSzrJ
ejSq/tRyvMFT1FlJ8tKoZBWbkThevMhx7jk5qsoCpLPmPoYCEoLEtpMYiQnDZgUc
TNoL1GjoDrjgmSen4QN5QZEGTOe/dsv1sGxWC+Tv/VwUl2GqVtKPZdKtGFqI8TLn
/27/jIdVQIKvHok2P/u9tvTUQA==
-----END CERTIFICATE-----

अपने वेब ब्राउज़र का उपयोग करके प्रमाणपत्र प्राप्त करें

मैं Git रिपॉजिटरी के साथ Redmine का उपयोग करता हूं और मैं वेब UI के लिए और git कमांड लाइन एक्सेस के लिए एक ही URL का उपयोग करता हूं। इस तरह, मुझे उस डोमेन के लिए अपने वेब ब्राउज़र में अपवाद जोड़ना पड़ा।

फ़ायरफ़ॉक्स का उपयोग करते हुए, मैं गया Options -> Advanced -> Certificates -> View Certificates -> Servers, वहाँ पाया गया स्व-डिज़ाइन किया गया होस्ट, इसे चुना और Exportबटन का उपयोग करके मुझे बिल्कुल वैसा ही फ़ाइल मिला, जैसा कि उपयोग करके बनाया गया है openssl

नोट: मैं थोड़ा आश्चर्यचकित था, इसमें प्राधिकरण के नाम का कोई उल्लेख नहीं है। यह ठीक है।

समर्पित फ़ाइल में विश्वसनीय प्रमाण पत्र होना

पिछले चरणों के परिणामस्वरूप कुछ फ़ाइल में प्रमाणपत्र होगा। इससे कोई फर्क नहीं पड़ता कि यह उस फ़ाइल का क्या है जब तक वह उस डोमेन तक पहुँचते समय आपके गिट के लिए दिखाई देती है। मैंनें इस्तेमाल किया~/git-certs/cert.pem

नोट: यदि आपको अधिक विश्वसनीय स्वनिर्धारित प्रमाणपत्रों की आवश्यकता है, तो उन्हें उसी फ़ाइल में डालें:

-----BEGIN CERTIFICATE-----
MIIDnzCCAocCBE/xnXAwDQYJKoZIhvcNAQEFBQAwgZMxCzAJBgNVBAYTAkRFMRUw
...........
/27/jIdVQIKvHok2P/u9tvTUQA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
AnOtHeRtRuStEdCeRtIfIcAtEgOeShErExxxxxxxxxxxxxxxxxxxxxxxxxxxxxxw
...........
/27/jIdVQIKvHok2P/u9tvTUQA==
-----END CERTIFICATE-----

यह काम करेगा (लेकिन मैंने इसे केवल एकल प्रमाणपत्र के साथ परीक्षण किया है)।

इस प्रमाणपत्र पर भरोसा करने के लिए git कॉन्फ़िगर करें

$ git config --global http.sslCAInfo /home/javl/git-certs/cert.pem

आप --systemइसके बजाय का उपयोग करते हुए उस सिस्टम को चौड़ा करने की कोशिश कर सकते हैं --global

और इसका परीक्षण करें: आप अब अपने सर्वर के साथ बिना सहारे के संचार कर पाएंगे:

$ git config --global http.sslVerify false #NO NEED TO USE THIS

यदि आप पहले से ही ssl प्रमाणपत्रों की अज्ञानता के लिए अपना git सेट करते हैं, तो इसे अनसेट करें:

$ git config --global --unset http.sslVerify

और आप यह भी जांच सकते हैं, कि आपने यह सब सही तरीके से किया है, बिना वर्तनी त्रुटियों के:

$ git config --global --list

सभी चर को सूचीबद्ध करना चाहिए, आपने विश्व स्तर पर सेट किया है। (मैंने http से रिश्तों को गुमराह किया)।


1
मुझे लगता है कि यह उत्तर स्वीकृत की तुलना में अधिक सही और पूर्ण है। धन्यवाद @Jan Vlcinsky
अल्फ्रेडो

1
उसके बाद सामान्य प्राधिकारी-हस्ताक्षरित प्रमाण पत्र काम करना बंद कर देते हैं, इसलिए मैं जीथब से उदाहरण नहीं खींच सकता। क्या प्राधिकरण द्वारा हस्ताक्षरित लोगों को बंद किए बिना एक स्व-हस्ताक्षरित प्रमाण पत्र जोड़ने का एक तरीका है?
माइकल इवको

4
@MichaelIvko समाधान जो यहां वर्णित 'सामान्य प्राधिकारी-हस्ताक्षरित प्रमाणपत्र' को ध्यान में रखता है (आपको अपना प्रमाणपत्र 'कर्ल-सीए-बंडल-आर्ट' फ़ाइल में जोड़ने की आवश्यकता है): blogs.msdn.com/b/phkelley-archive/2014/
01/20

3
इस दृष्टिकोण के साथ समस्या यह है कि यह प्रभावी रूप से git के साथ आने वाले सभी डिफ़ॉल्ट CA को हटा देता है (जैसे कि ऐसा करने के बाद, आप github से खींचने में सक्षम नहीं होंगे)। सबसे अधिक संभावना है कि सबसे अधिक के लिए क्या देख रहे हैं नहीं है। एक बेहतर उदाहरण नई रूट CA को Git \ bin \ curl-ca-bundle.crt की एक प्रति में जोड़ना है, और फिर अपने gitconfig से curl-ca-bundle.crt की नई प्रति देखें।
crimbo

3
यह खिड़कियों पर काम करता है! बेस -64 कोडेड X.509 फ़ाइल (.CER) के रूप में प्रमाण पत्र-श्रृंखला में हर प्रमाण को निर्यात करें और सभी फाइलों को एक साथ रखें और इस फाइल को देखें। सुनिश्चित करें कि आपके पास प्रमाणित फ़ाइल के लिए पथ में स्थान नहीं है (oldschool पथ का उपयोग करें)
pscheit

3

OSX उपयोगकर्ता समायोजन।

OSX पर कॉन्फ़िगर करते समय स्वीकृत उत्तर के चरणों के बाद मेरे लिए एक छोटे से जोड़ के साथ काम किया।

मैंने cert.pemअपने OSX के तहत एक निर्देशिका में फ़ाइल को उपयोगकर्ता में लॉग इन किया और इस तरह मुझे विश्वसनीय प्रमाण पत्र के लिए स्थान समायोजित करने का कारण बना।

इस प्रमाणपत्र पर भरोसा करने के लिए git कॉन्फ़िगर करें:

$ git config --global http.sslCAInfo $HOME/git-certs/cert.pem
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.