2012-06-29 5 views
5

बस एक साधारण एसएसएल सर्वर स्थापित करने की कोशिश कर रहा है। अतीत में मेरे पास कभी भी एसएसएल काम नहीं था। मुझे एसएसएल प्रमाण पत्र और हस्ताक्षर करने की एक ढीली समझ है।पायथन सरल एसएसएल सॉकेट सर्वर

कोड वहाँ के साथ ### में सरल

import socket, ssl 

context = ssl.SSLContext(ssl.PROTOCOL_TLSv1) 
context.load_cert_chain(certfile="mycertfile") ############### 

bindsocket = socket.socket() 
bindsocket.bind(('', 2099)) 
bindsocket.listen(5) 

while True: 
    newsocket, fromaddr = bindsocket.accept() 
    sslsoc = context.wrap_socket(newsocket, server_side=True) 
    request = sslsoc.read() 
    print(request) 

लाइन है के बाद यह एक है कि काम कर रहा है is not है। मुझे नहीं पता कि मुझे एक पीईएम फाइल जेनरेट करने के लिए openssl के साथ क्या करना है जो यहां काम करेगा।

क्या कोई मुझे इस सरल सॉकेट काम को बनाने के तरीके के बारे में बता सकता है।

वैसे, यह HTTP के लिए उपयोग नहीं किया जाता है।

+0

आप मुड़ का उपयोग कर के लिए उत्तरदायी हैं, तो क्या यहां एक अच्छा उदाहरण OpenSSL का उपयोग करता है है: http://twistedmatrix.com/documents/current/core/howto/ssl.html कि ऐसा लगता है कि एक प्रमाण पत्र और एक की आवश्यकता है सार्वजनिक कुंजी, जहां प्रमाणपत्र सार्वजनिक कुंजी की निजी जोड़ी के साथ हस्ताक्षरित है। – jozzas

+0

यह अच्छा है और यह अपेक्षाकृत आसान दिखता है, लेकिन मुझे बस उपयोग करने के लिए सही फ़ाइल उत्पन्न करने के लिए आदेश हैं। मैंने थोड़ी देर पहले कोशिश की लेकिन बहुत अजीब त्रुटियां मिलीं। जाहिर है, मैंने इसे सही तरीके से हस्ताक्षर नहीं किया है या सही फ़ाइल का उपयोग नहीं किया है। – Caprin

+0

ऐसा लगता है कि इसके लिए बहुत सारे ट्यूटोरियल हैं, उदाहरण के लिए, आपने इसका अनुसरण करने का प्रयास किया है? http://devsec.org/info/ssl-cert.html – jozzas

उत्तर

8

आप एक स्व-हस्ताक्षरित प्रमाणपत्र

openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem 

openssl ढांचे में कुछ जानकारी, जैसे कि आपका देश, शहर, आदि के रूप में सिर्फ निर्देश का पालन करने के लिए कह होगा उत्पन्न करने के लिए इस आदेश का उपयोग कर सकते हैं, और आप cert.pem फ़ाइल प्राप्त होगी। आउटपुट फ़ाइल में आपकी आरएसए निजी कुंजी दोनों होगी, जिसके साथ आप अपनी सार्वजनिक कुंजी और प्रमाण पत्र उत्पन्न कर सकते हैं। आउटपुट फ़ाइल इस तरह दिखता है:

-----BEGIN RSA PRIVATE KEY----- 
# your private key 
-----END RSA PRIVATE KEY----- 
-----BEGIN CERTIFICATE----- 
# your certificate 
-----END CERTIFICATE----- 

बस इसे लोड, और ssl मॉड्यूल आप के लिए बाकी संभाल लेंगे:

context.load_cert_chain(certfile="cert.pem", keyfile="cert.pem") 

Btw, वहाँ कोई "SSLContext" को Python2 में। लोग को Python2 उपयोग कर रहे हैं के लिए, बस पीईएम फ़ाइल जब सॉकेट लपेटकर आवंटित:

newsocket, fromaddr = bindsocket.accept() 
connstream = ssl.wrap_socket(newsocket, 
          server_side=True, 
          certfile="cert.pem", 
          keyfile="cert.pem", 
          ssl_version=YOUR CHOICE) 

उपलब्ध ssl संस्करण: ssl.PROTOCOL_TLSv1, ssl.PROTOCOL_SSLv2, ssl.PROTOCOL_SSLv3, ssl.PROTOCOL_SSLv23। यदि आपको कोई जानकारी नहीं है, तो ssl.PROTOCOL_SSLv23 आपकी पसंद हो सकती है क्योंकि यह अन्य संस्करणों के साथ सबसे अधिक अनुकूलता प्रदान करती है।

+1

, 'ssl.create_default_context' फ़ंक्शन पर कॉल करें (यह हाल ही में पाइथन 2 संस्करणों पर भी काम करता है)। – jfs

+0

मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन पुडल भेद्यता के कारण किसी को भी टीएलएस पर एसएसएलवी 3 के उपयोग की सलाह नहीं देनी चाहिए। Https://en.wikipedia.org/wiki/POODLE पर अधिक जानकारी – fileinster