विंडोज में पाइप द्वारा उपयोग किए जाने वाले CA स्टोर में कस्टम CA रूट प्रमाणपत्र कैसे जोड़ें?


85

मैंने अभी python.org से Python3 स्थापित किया है और मुझे इसके साथ पैकेज स्थापित करने में समस्या हो रही है pip। डिजाइन के अनुसार, नेटवर्क पर एक मानव-में-मध्य पैकेट निरीक्षण उपकरण है जो अपने स्वयं के प्रमाण पत्र के साथ सभी एसएसएल कनेक्शनों को इस्तीफा देकर सभी पैकेट (एसएसएल शामिल) का निरीक्षण करता है। GPO का हिस्सा कस्टम रूट प्रमाणपत्र को Windows Keystore में धकेलता है।

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

मैं अजगर के लिए कैसे पूरा करूँ? अभी, जब मैं उपयोग करके पैकेजों को स्थापित करने की कोशिश करता हूं pip, तो समझ लें कि मुझे अद्भुत [SSL: CERTIFICATE_VERIFY_FAILED]त्रुटियां मिली हैं।

मुझे एहसास है कि मैं उन्हें --trusted-hostपैरामीटर का उपयोग करके अनदेखा कर सकता हूं , लेकिन मैं ऐसा नहीं करना चाहता कि हर पैकेज के लिए मैं स्थापित करने की कोशिश कर रहा हूं।

क्या अजगर को उपयोग करने वाले CA सर्टिफिकेट स्टोर को अपडेट करने का कोई तरीका है?


5
@rfkortekaas उन सभी विकल्पों में प्रक्रिया में कुछ नया जोड़ना शामिल है। पायथन को सिस्टम पर कहीं संग्रहीत डिफ़ॉल्ट ट्रस्ट स्टोर का उपयोग करना चाहिए। मैं उस ट्रस्ट स्टोर को संशोधित करना चाहता हूं। मैं अतिरिक्त चर, विभिन्न सीए स्टोर आदि को जोड़ना नहीं चाहता। जावा में, jvm अपने स्वयं के ट्रस्ट स्टोर (OS से अलग) पर निर्भर करता है। मुझे संदेह है कि अजगर कुछ ऐसा ही कर रहा होगा क्योंकि मेरा मूल प्रमाणपत्र मेरे विंडोज स्टोर में है और अजगर द्वारा मान्यता प्राप्त नहीं है।
एरिक बी।

जवाबों:


97

स्व-हस्ताक्षरित प्रमाणपत्र प्राधिकारी pip/conda

जीआईटी के साथ एक समान समस्या का दस्तावेजीकरण करने के बाद ( मैं कैसे एक स्व हस्ताक्षरित प्रमाण पत्र स्वीकार कर सकता हूं? ), यहां हम फिर से एक कॉर्पोरेट फ़ायरवॉल के पीछे हैं जिसमें एक प्रॉक्सी हमें एक मीत "हमला" दे रहा है जिस पर हमें भरोसा करना चाहिए और:

सभी एसएसएल सत्यापन को अक्षम करें!

यह एक खराब सुरक्षा संस्कृति बनाता है। वह व्यक्ति मत बनो।

tl; डॉ

pip config set global.cert path/to/ca-bundle.crt
pip config list
conda config --set ssl_verify path/to/ca-bundle.crt
conda config --show ssl_verify

# Bonus while we are here...
git config --global http.sslVerify true
git config --global http.sslCAInfo path/to/ca-bundle.crt

लेकिन हमें कहाँ मिलता है ca-bundle.crt?


CA बंडल को प्राप्त करें

CURL ने सर्टिफिकेट अथॉरिटीज का एक उद्धरण मोज़िला फ़ायरफ़ॉक्स के साथ प्रकाशित किया

https://curl.haxx.se/docs/caextract.html

मैं आपको इस cacert.pemफ़ाइल को एक टेक्स्ट एडिटर में खोलने की सलाह देता हूं क्योंकि हमें इस फाइल में अपना स्व-हस्ताक्षरित सीए जोड़ना होगा।

प्रमाणपत्र X.509 का अनुपालन करने वाला एक दस्तावेज है, लेकिन उन्हें कुछ तरीकों से डिस्क में एन्कोड किया जा सकता है। नीचे का लेख एक अच्छा पढ़ा गया है, लेकिन संक्षिप्त संस्करण यह है कि हम बेस 64 एनकोडिंग के साथ काम कर रहे हैं जिसे अक्सर फ़ाइल एक्सटेंशन में पीईएम कहा जाता है। आप देखेंगे कि इसका प्रारूप है:

----BEGIN CERTIFICATE----
....
base64 encoded binary data
....
----END CERTIFICATE----

https://support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt-vs-cer-vs-pem-certificates-and-how-to-convert-them


हमारा स्वप्रमाणित प्रमाण पत्र प्राप्त करना

नीचे हमारे स्व-हस्ताक्षरित प्रमाण पत्र प्राप्त करने के बारे में कुछ विकल्प दिए गए हैं:

  • वाया ओपनएसएसएल सीएलआई
  • ब्राउज़र
  • पायथन स्क्रिप्टिंग के माध्यम से

ओपनएसएसएल सीएलआई द्वारा हमारे स्व-हस्ताक्षरित प्रमाण पत्र प्राप्त करें

/unix/451207/how-to-trust-self-signed-certificate-in-curl-command-line/468360#468360

echo quit | openssl s_client -showcerts -servername "curl.haxx.se" -connect curl.haxx.se:443 > cacert.pem

ब्राउज़र के माध्यम से हमारे स्व-हस्ताक्षरित प्रमाणपत्र प्राधिकरण प्राप्त करें

इस उत्तर और लिंक किए गए ब्लॉग के लिए धन्यवाद, यह चरणों (विंडोज पर) को दिखाता है कि प्रमाण पत्र कैसे देखें और फिर बेस 64 पीईएम एन्कोडिंग विकल्प का उपयोग करके फ़ाइल में कॉपी करें।

इस निर्यात की गई फ़ाइल की सामग्री की प्रतिलिपि बनाएँ और इसे अपनी cacerts.pemफ़ाइल के अंत में चिपकाएँ ।

स्थिरता के लिए इस फ़ाइल का नाम बदलें cacerts.pem-> ca-bundle.crtऔर इसे कहीं आसान की तरह रखें:

# Windows
%USERPROFILE%\certs\ca-bundle.crt

# or *nix
$HOME/certs/cabundle.crt

पायथन के माध्यम से हमारे स्व-हस्ताक्षरित प्रमाणपत्र प्राधिकरण प्राप्त करें

सभी शानदार उत्तर के लिए धन्यवाद:

अजगर में अनुरोधों से प्रतिक्रिया एसएसएल प्रमाणपत्र कैसे प्राप्त करें?

मैंने इसे एक कदम आगे ले जाने के प्रयास के लिए एक साथ रखा है।

https://github.com/neozenith/get-ca-py


आखिरकार

पाइप और कोंडा में कॉन्फ़िगरेशन सेट करें ताकि यह पता चले कि यह सीए स्टोर हमारे अतिरिक्त स्व-हस्ताक्षरित सीए के साथ कहां रहता है।

pip config set global.cert %USERPROFILE%\certs\ca-bundle.crt
conda config --set ssl_verify %USERPROFILE%\certs\ca-bundle.crt

या

pip config set global.cert $HOME/certs/ca-bundle.crt
conda config --set ssl_verify $HOME/certs/ca-bundle.crt

फिर

pip config list
conda config --show ssl_verify

# Hot tip: use -v to show where your pip config file is...
pip config list -v
# Example output for macOS and homebrew installed python
For variant 'global', will try loading '/Library/Application Support/pip/pip.conf'
For variant 'user', will try loading '/Users/jpeak/.pip/pip.conf'
For variant 'user', will try loading '/Users/jpeak/.config/pip/pip.conf'
For variant 'site', will try loading '/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/pip.conf'

संदर्भ


6
सभी समय के सबसे बड़े उत्तरों में से एक
केविन पाउली

pip config set Global.trusted-host XXXXX.com
zzzz zzzz

खिड़कियों में, यह प्रमाण पत्र के लिए .pem प्रारूप का उपयोग करके मेरे लिए काम करता है।
डैनियल आर्गुलेस

1
@ DanielArgüelles हाँ, यह सही है। ज्यादातर बार आप सर्टिफिकेट अथॉरिटी बंडल को मर्ज नहीं कर सकते हैं लेकिन मेरे पास पर्याप्त समय है जहां पूर्ण बंडल की आवश्यकता होती है ताकि पाइप या कोंडा अन्य सर्वरों के लिए प्रमाण पत्र को मान्य कर सके। अंत में एक बंडल अभी भी एक पाठ फ़ाइल है जिसमें बहुत सारी पेम फ़ाइलों की सामग्री है। खुशी है कि यह काम किया और आपको सत्यापन को अक्षम करने की आवश्यकता नहीं थी! : डी
जोश पीक

42

भागो: python -c "import ssl; print(ssl.get_default_verify_paths())"प्रमाण पत्र को सत्यापित करने के लिए उपयोग किए जाने वाले वर्तमान रास्तों की जांच करने के लिए। अपनी कंपनी के मूल प्रमाणपत्र को उनमें से किसी एक में जोड़ें।

पथ openssl_capath_envपर्यावरण चर को इंगित करता है SSL_CERT_DIR:।

यदि SSL_CERT_DIRमौजूद नहीं है, तो आपको इसे बनाने और अपने फाइल सिस्टम के भीतर एक मान्य फ़ोल्डर में इंगित करने की आवश्यकता होगी। फिर आप इसे उपयोग करने के लिए इस फ़ोल्डर में अपना प्रमाणपत्र जोड़ सकते हैं।


11
मेरे विंडोज सिस्टम पर यह 'usr / usr / local / ssl / certs' मिलता है जो विंडोज पर उपलब्ध नहीं है।
कॉलिन टैलबर्ट

1
मैं आखिरकार ऐसा करने के साथ-साथ एक अन्य प्रोजेक्ट पर जा रहा था, और @ColinTalbert के समान यह एक गैर-मौजूद फ़ोल्डर को इंगित करता है /usr/local/ssl/certs
एरिक बी।

मैंने अपना प्रश्न संकलित कर लिया है और उम्मीद है कि यह इस मामले को हल कर देगा।
rfkortekaas

1
@rfkortekaas SSL_CERT_FILE या SSL_CERT_DIR चर अपडेट करने से काम नहीं चला। मैंने अभी इस समस्या के लिए एक नया SO प्रश्न बनाया है क्योंकि यह केवल PEM फ़ाइल को अद्यतन करने के तरीके का प्रश्न नहीं हो सकता है, बल्कि यह भी है कि साइबरगन / विंडोज में सही रास्तों तक पहुँचने के लिए अजगर कैसे प्राप्त करें।
एरिक बी।

1
मैंने कोशिश की। मैंने ~/.config/pip/pip.confआवश्यक सेटिंग्स के साथ एक pip.conf फ़ाइल बनाना समाप्त कर दिया । इस जवाब को देखें
एरिक बी।

7

नहीं सबसे अच्छा जवाब है, लेकिन आप पुनः उपयोग कर सकते एक पहले से ही ca का उपयोग कर बंडल बनाया --certका विकल्प pip, उदाहरण के लिए:

pip install SQLAlchemy==1.1.15 --cert="C:\Users\myUser\certificates\my_ca-bundle.crt"

4

विंडोज पर, मैंने% APPDATA% \ pip \ में pip.ini फ़ाइल बनाकर इसे हल किया

उदा C: \ Users \ asmith \ AppData \ Roaming \ pip \ pip.ini

Pip.ini में मैंने अपने प्रमाणपत्र के लिए रास्ता रखा:

[global]
cert=C:\Users\asmith\SSL\teco-ca.crt

https://pip.pypa.io/en/stable/user_guide/#configuration में कॉन्फ़िगरेशन फ़ाइल के बारे में अधिक जानकारी है।


हाय एलेक्स, आपने pip.ini फ़ाइल में अपने प्रमाणपत्र का पथ "कैसे" डाला? कमांड लाइन से? क्या आपने फ़ाइल पथ को नोटपैड जैसी किसी चीज़ में टाइप किया है और इसे टेक्स्ट फ़ाइल के रूप में सहेजा है? मैं एनाकोंडा प्रॉम्प्ट का उपयोग कर रहा हूं, लेकिन मुझे लगता है कि यह विंडोज़ के समान है।
स्पेसस्टैपी

मैंने नोटपैड के साथ एक पाठ फ़ाइल बनाई और फिर फ़ाइल एक्सटेंशन को "txt" से "ini" में बदल दिया।
एलेक्स

आह। ठीक है। क्या आपको मार्ग के ऊपर "[गोबल]" भी लिखना है? क्या आप जानते हैं कि मैं इस प्रकार की चीज़ के लिए ट्यूटोरियल के लिए कहाँ जा सकता हूँ? धन्यवाद।
स्पेसडेपी

हां, आपको "[वैश्विक]" में भी लिखना होगा। क्षमा करें, मुझे किसी भी ट्यूटोरियल का पता नहीं है, लेकिन pip.pypa.io/en/stable/user_guide/#configuration में अधिक जानकारी है।
एलेक्स

धन्यवाद, मैंने इसे दोनों तरीकों से आज़माया और हाँ, "[वैश्विक]" चोट नहीं पहुँचाता।
स्पेसस्टैपी

1

विंडोज पर वैकल्पिक समाधान अजगर-सर्टिफिकेट-विन 32 स्थापित करना है जो पायथन को विंडोज सर्टिफिकेट स्टोर का उपयोग करने की अनुमति देगा।

pip install python-certifi-win32

0

मुझे लगता है कि nt86 का समाधान सबसे उपयुक्त है क्योंकि यह अंतर्निहित विंडोज इन्फ्रास्ट्रक्चर (सर्टिफिकेट स्टोर) का लाभ उठाता है। लेकिन यह नहीं समझाता है कि पाइप को गैर-कार्यात्मक होने के बाद से शुरू करने के लिए अजगर-सर्टिफिकेट -32 कैसे स्थापित करें।

छल का उपयोग --trustedhostअजगर-सर्टिफिकेट-विन 32 को स्थापित करने के लिए किया जाता है और फिर उसके बाद, पाइप स्वचालित रूप से प्रॉक्सी द्वारा उपयोग किए गए प्रमाण पत्र को लोड करने के लिए विंडोज़ सर्टिफिकेट स्टोर का उपयोग करेगा।

तो संक्षेप में, आपको करना चाहिए:

pip install python-certifi-win32 -trustedhost pypi.org

और उसके बाद आपको जाना अच्छा होना चाहिए


-1

एनाकोंडा नेविगेटर खोलें।

फ़ाइल \ प्राथमिकता पर जाएं।

SSL सत्यापन अक्षम करें (अनुशंसित नहीं)

या SSL प्रमाणपत्र पथ को सक्षम और इंगित करें (वैकल्पिक)

एक विशेष संस्करण के लिए एक पैकेज अद्यतन करें:

टॉप-राइट पर इंस्टॉल का चयन करें

पैकेज का चयन करें टिक पर क्लिक करें

अद्यतन के लिए चिह्नित करें

विशिष्ट संस्करण स्थापना के लिए चिह्नित करें

अप्लाई पर क्लिक करें

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