सम्मान नहीं किया जा रहा AppEngine डेवलपर appserver में मैं इस तरह एक त्रुटि हो रही है: जब मैं एक स्व-हस्ताक्षरित साथ एक https
सर्वर से इस तरह लाने बनाने रहाAppEngine UrlFetch validate_certificate = झूठी/कोई नहीं
SSLCertificateError: Invalid and/or missing SSL certificate for URL ...
प्रमाण पत्र (लगभग हमेशा localhost
पोर्ट-अग्रेषित एक वी एम को ssh से अधिक):
result = urlfetch.fetch(url=url, method=method, payload=payload,
deadline=DEADLINE, validate_certificate=None)
है कि अमान्य प्रमाण पत्र जहां validate_certificate
False
है के लिए SSL विफलताओं की उम्मीद नहीं है, हालांकि यह काफी है संभावित रूप से एसएसएल प्रमाणपत्रों को सत्यापित करने के लिए पाइथन में 2.7.9 नीति का दुष्प्रभाव।
ध्यान दें कि False
(None
के बजाय) validate_certificate
के लिए या तो काम नहीं करता है।
यह समस्या ओएस एक्स 10.10.2-4 पर होमब्री/एक्सकोड के माध्यम से पाइथन 2.7.9-10 पर होती है, जिसमें एपइंजिन 1.9.18 1.19.26 के माध्यम से होता है।
Google App Engine पर इस बारे में समस्याएं हैं (उदा। 12096), लेकिन मैं एक कामकाज की तलाश में हूं।
यहाँ क्या मैं इस के आसपास काम करने के लिए कोशिश की है:
मैक के लॉगिन कीचेन के लिए प्रमाण पत्र जोड़ें
(ब्राउज़र, अजगर से नहीं में काम करता है)
app-engine-python/lib/cacerts/cacerts.txt
को प्रमाण पत्र जोड़ें और/या./lib/cacerts/urlfetch_cacerts.txt
(हालांकि इसे संभवतः पर पर काम करने की आवश्यकता है, क्योंकि यह एकमात्र ऐसा मामला प्रतीत होता है जहां उनका उपयोग किया जाता है) उदाहरण के साथ$ गूंज >> /usr/local/share/app-engine-python/lib/cacerts/urlfetch_cacerts.txt
$ openssl X509 -subject -इन server.crt >>/usr/स्थानीय /share/app-engine-python/lib/cacerts/urlfetch_cacerts.txt
ssl HTTPS के यानी
वैकल्पिक हल के साथ जाँच अक्षमssl._create_default_https_context = ssl._create_unverified_context
पर या के बाद
import ssl
(लाइन 1149 के आसपास) केgoogle/appengine/dist27/python_std_lib/httplib.py
यह/ओएस एक्स एल कैपिटल अब एक व्यावहारिक विकल्प है विशेष रूप से XCode 7 के रूप में पदावनति के बाद से मैक पर समस्याग्रस्त है।
एक बेहतर कामकाज में एपइंजिन कोड को बंदर-पैचिंग में शामिल नहीं किया जाएगा जब भी डेवलपर ऐप्स अपडेट किया जाता है।
संपादित
ध्यान दें कि मैक builtin OpenSSL प्रमाण पत्र /System/Library/OpenSSL
में जमा हो जाती है, जो SIP/rootlessness साथ सुरक्षित है, जो स्पष्ट रूप से साथ गंदगी के लिए एक दर्द और एक सार्थक सुविधा अगर हम कर सकते हैं रखने के लिए है।
मैंने सत्यापित किया है कि प्रमाण पत्र openssl s_client -connect localhost:7500 -CAfile server.pem
का उपयोग करके मान्य करता है।
यह hash.#
प्रारूप जहां हैश openssl x509 -subject_hash -in server.pem
से आता है (या homebrew ssl, अर्थात् /usr/local/Cellar/openssl/1.0.2d_1/bin/openssl
) के साथ कीचेन पर और /usr/local/etc/openssl/certs
जोड़ लिया गया है। किस मामले में /usr/local/Cellar/openssl/1.0.2d_1/bin/openssl s_client -connect localhost:7500
प्रमाण पत्र सत्यापित करता है (लेकिन अजगर अभी भी नहीं है)।
मैंने पायथन और openssl के होमब्रू संस्करण का उपयोग करने का प्रयास किया है, लेकिन इसका कोई फायदा नहीं हुआ है। पाइथन में निम्नलिखित चलाना हमेशा असफल रहता है; जहां SSL_CERT_FILE
सर्वर का सुरक्षा प्रमाणपत्र के लिए सेट है
./pve/bin/python -c "import requests; requests.get('https://localhost:7500')"
यह भी विफल रहता है, और यह भी जहां SSL_CERT_PATH
/usr/local/etc/openssl/certs
पर सेट है विफल रहता है (उपाय एक जोड़ा के बाद से openssl
आदेश अनिवार्य रूप से इस तरह काम करता है यह काम करने के लिए उम्मीद कर सकते हैं के लिए अर्थात)।
ध्यान दें, pve
एक आभासी env जहां help(ssl)
से पता चलता है एक FILE
की /usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py
आगे की पुष्टि करने के लिए homebrew पायथन के _ssl.so
लिंक homebrew है कि के openssl मैं भाग गया:
xcrun otool एल /usr/स्थानीय/सेलर /python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_ssl.so
जो रिटर्न
,210./Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_ssl.so:
/usr/स्थानीय/opt/openssl /lib/libssl.1.0.0.dylib (संगतता संस्करण 1.0.0, वर्तमान संस्करण 1.0.0)
/usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib (संगतता संस्करण 1.0। 0, वर्तमान संस्करण 1.0.0)
/usr/lib/libSystem.B.dylib (अनुकूलता संस्करण 1.0.0, वर्तमान संस्करण 1225.1.1)
एक brew info openssl
चलाता है यह CAVEATS
के तहत टिप्पणी:
एक सीए फाइल सिस्टम कीचेन से प्रमाण पत्र का उपयोग कर चलाया गया है। अतिरिक्त प्रमाण पत्र जोड़ने के लिए, में फ़ाइलों .pem जगह /usr/स्थानीय/etc/openssl/प्रमाणपत्र
लेकिन स्पष्ट रूप से किसी कारण अजगर के लिए प्रमाण पत्र को खोजने के लिए homebrew के openssl कलन विधि का उपयोग नहीं कर रहा है।
तो मैं प्रमाण पत्र वाले OpenSSL निर्देशिका दस्तावेजों के साथ-साथ कीचेन (दोनों .pem
और .p12
स्वरूपों में में निर्दिष्ट कर रहे हैं यही कारण है कि अजगर मानक पुस्तकालय मान्य नहीं है के रूप में एक नुकसान में बने हुए हैं, Secure Sockets Layer (SSL)
के लिए "हमेशा पर भरोसा" के साथ)।
धन्यवाद @ एलेक्स। क्या मैक सिस्टम में प्रमाण पत्र जोड़ना संभव नहीं है, तो पाइथन के Httplib तब उपयोग करेंगे? –
ब्रायन, मैक पर पाइथन एसएसएल लिब कैसे काम करता है, मैं बहुत परिचित नहीं हूं, मैं [एसएसएल दस्तावेज़ पृष्ठ] (https://docs.python.org/2/library/ssl.html#ssl-contexts) की जांच करूंगा और देखें कि डिफ़ॉल्ट पथ स्ट्रिंग क्या है: 'ssl.get_default_verify_paths()'। हो सकता है कि आपके प्रमाणपत्र फ़ाइल में पथ सेट करने के लिए env वैरिएबल का उपयोग करने का एक तरीका हो) [https://www.python.org/dev/peps/pep-0476/#trust-डेटाबेस)। – Alex
[यहां प्रासंगिक दस्तावेज़ है] (http://gagravarr.org/writing/openssl-certs/others.shtml) openssl के लिए स्वयं-हस्ताक्षरित प्रमाणपत्र कैसे जोड़ें। – Alex