import eventlet eventlet.monkey_patch() import os import socket from flask import Flask, render_template, request, Response, send_file from flask import make_response from flask_socketio import SocketIO from OpenSSL import SSL, crypto ''' requirements.txt cffi==1.9.1 click==6.6 cryptography==1.7.1 enum-compat==0.0.2 eventlet==0.20.1 Flask==0.12 Flask-SocketIO==2.8.2 greenlet==0.4.11 idna==2.2 itsdangerous==0.24 Jinja2==2.8.1 MarkupSafe==0.23 pyasn1==0.1.9 pycparser==2.17 pyOpenSSL==16.2.0 python-engineio==1.1.0 python-socketio==1.6.2 six==1.10.0 Werkzeug==0.11.15 ''' app = Flask(__name__) app.config['SECRET_KEY'] = 'secret!' async_mode = None socketio = SocketIO(app, async_mode=async_mode) # Crypto stuff def create_self_signed_cert(certfile, keyfile, certargs, cert_dir="."): C_F = os.path.join(cert_dir, certfile) K_F = os.path.join(cert_dir, keyfile) if not os.path.exists(C_F) or not os.path.exists(K_F): k = crypto.PKey() k.generate_key(crypto.TYPE_RSA, 1024) cert = crypto.X509() cert.get_subject().C = certargs["Country"] cert.get_subject().ST = certargs["State"] cert.get_subject().L = certargs["City"] cert.get_subject().O = certargs["Organization"] cert.get_subject().OU = certargs["Org. Unit"] cert.get_subject().CN = 'Example' cert.set_serial_number(1000) cert.gmtime_adj_notBefore(0) cert.gmtime_adj_notAfter(315360000) cert.set_issuer(cert.get_subject()) cert.set_pubkey(k) cert.sign(k, 'sha1') open(C_F, "wb").write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert)) open(K_F, "wb").write(crypto.dump_privatekey(crypto.FILETYPE_PEM, k)) if __name__ == "__main__": CERT_FILE = "cert.pem" KEY_FILE = "key.pem" create_self_signed_cert(CERT_FILE, KEY_FILE, certargs= {"Country": "US", "State": "NY", "City": "Ithaca", "Organization": "Python-Bugs", "Org. Unit": "Proof of Concept"}) socketio.run(app, debug=True, use_reloader=False, certfile=CERT_FILE, keyfile=KEY_FILE, port=5500)