2013-09-23 4 views
9

मेरे पास क्लाइंट सर्वर एप्लिकेशन है। मैं उन्हें का उपयोग कर इसफ्लास्क पायथन में एचटीपी के साथ एचटीपीएस

context = SSL.Context(SSL.SSLv3_METHOD) 
    context.use_privatekey_file('/path_to_key/key.key') 
    context.use_certificate_file('/path_to_cert/cert.crt') 
    app.run(use_reloader=True, host='0.0.0.0',port=9020,ssl_context = context) 

अब मैं का उपयोग कर सर्वर http और https दोनों चलाना चाहते हैं SSL एन्क्रिप्शन का उपयोग कर HTTPS पर कनेक्ट करने के लिए कामयाब रहे। क्या ऐसा करने का कोई संभावित तरीका है?

उत्तर

9

पहली बड़ी बात: किसी भी भारी उठाने के लिए फ्लास्क में निर्मित वेब सर्वर का उपयोग न करें। आपको अपाचे (mod_wsgi) nginex + gunicore, आदि जैसे वास्तविक वेब सर्वर का उपयोग करना चाहिए। इन सर्वरों के पास http और https को एक साथ चलाने के तरीके पर दस्तावेज़ हैं।

+0

वैसे मैं फ्लास्क चलाने के लिए mod_wsgi के साथ अपाचे का उपयोग कर रहा हूं, मैंने अलग-अलग बंदरगाहों पर दोनों (http और https) का उपयोग करने के लिए अपाचे को कॉन्फ़िगर करने में कामयाब रहा है 80 और 443 यह https के साथ ठीक काम कर रहा है लेकिन http कनेक्शन ssl_context तक काम नहीं कर रहा है फ्लास्क –

+0

में सक्षम है app.run का उपयोग न करें जब आप किसी वास्तविक सर्वर के पीछे चल रहे हों। – Tritium21

+0

तब मुझे क्या उपयोग करना चाहिए? –

7

मेरे मैं कुप्पी के SSLify बाहर की कोशिश कर सुझाव देते हैं - https://github.com/kennethreitz/flask-sslify

प्रयोग

प्रयोग बहुत सरल है:

from flask import Flask 
from flask_sslify import SSLify 

app = Flask(__name__) 
sslify = SSLify(app) 

आप एक HTTP अनुरोध करते हैं, तो यह स्वचालित रूप से रीडायरेक्ट करेगा:

$ curl -I http://secure-samurai.herokuapp.com/ 
HTTP/1.1 302 FOUND 
Content-length: 281 
Content-Type: text/html; charset=utf-8 
Date: Sun, 29 Apr 2012 21:39:36 GMT 
Location: https://secure-samurai.herokuapp.com/ 
Server: gunicorn/0.14.2 
Strict-Transport-Security: max-age=31536000 
Connection: keep-alive 

स्थापित

स्थापना भी सरल है:

$ pip install Flask-SSLify 
+2

यह इस प्रश्न का उत्तर नहीं देता है। – Tritium21

+0

यह स्लैक के लिए एसएसएल-सक्षम कनेक्शन बनाने के लिए भी काम नहीं करता है – chandresh

1

अब मैं सर्वर का उपयोग http और https दोनों वहाँ ऐसा करने के लिए किसी भी संभव तरीका है चलाना चाहते हैं ??

मुझे हाल ही में एक ही समस्या है। https के लिए http के लिए एक, एक और: एक प्रॉक्सी प्रयोग किया जाता है कि क्या के बाद http https पर रीडायरेक्ट कर रहा है, मैं सिर्फ अलग बंदरगाहों पर दो प्रक्रियाओं शुरू कर दिया है परीक्षण करने के लिए कहने के लिए

#!/usr/bin/env python3 
"""Serve both http and https. Redirect http to https.""" 
from flask import Flask, abort, redirect, request # $ pip install flask 

app = Flask(__name__) 

@app.route('/') 
def index(): 
    if request.url.startswith('http://'): 
     return redirect(request.url.replace('http', 'https', 1) 
         .replace('080', '443', 1)) 
    elif request.url.startswith('https://'): 
     return 'Hello HTTPS World!' 
    abort(500) 

def https_app(**kwargs): 
    import ssl 
    context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) 
    context.load_cert_chain('server.crt', 'server.key') 
    app.run(ssl_context=context, **kwargs) 


if __name__ == "__main__": 
    from multiprocessing import Process 

    kwargs = dict(host='localhost') 
    Process(target=https_app, kwargs=dict(kwargs, port=7443), 
      daemon=True).start() 
    app.run(port=7080, **kwargs) 

जरूरत नहीं है, यह केवल परीक्षण के लिए है/डिबगिंग उद्देश्यों।

संबंधित मुद्दे