web-dev-qa-db-ja.com

HTTPS機能をpython flask Webサーバーに追加できますか?

私は、このネットワークデバイスがダイジェスト認証とHTTPSを使用するネットワークデバイスで安らかなインターフェースをモックアップするためのWebインターフェースを構築しようとしています。ダイジェスト認証をWebサーバーに統合する方法を見つけましたが、FLASKを使用してhttpsを取得する方法を見つけることができないようです。それを実現するための以下のコード。

from flask import Flask, jsonify

app = Flask(__name__)


@app.route('/')
def index():
    return 'Flask is running!'


@app.route('/data')
def names():
    data = {"names": ["John", "Jacob", "Julie", "Jennifer"]}
    return jsonify(data)


if __name__ == '__main__':
    app.run()
26
robm

これはピンチでも機能します

from flask import Flask, jsonify


from OpenSSL import SSL
context = SSL.Context(SSL.PROTOCOL_TLSv1_2)
context.use_privatekey_file('server.key')
context.use_certificate_file('server.crt')




app = Flask(__name__)


@app.route('/')
def index():
    return 'Flask is running!'


@app.route('/data')
def names():
    data = {"names": ["John", "Jacob", "Julie", "Jennifer"]}
    return jsonify(data)


#if __name__ == '__main__':
#    app.run()
if __name__ == '__main__':  
     app.run(Host='127.0.0.1', debug=True, ssl_context=context)
20
RobM

コード

from flask import Flask, jsonify
import os

ASSETS_DIR = os.path.dirname(os.path.abspath(__file__))
app = Flask(__name__)


@app.route('/')
def index():
    return 'Flask is running!'


@app.route('/data')
def names():
    data = {"names": ["John", "Jacob", "Julie", "Jennifer"]}
    return jsonify(data)


if __name__ == '__main__':
    context = ('local.crt', 'local.key')#certificate and key files
    app.run(debug=True, ssl_context=context)

opensslまたはpyopensslを使用しないでください。これはPythonで廃止されました

17
anand tripathi

ビルトイン(開発)サーバーではなく、実際のWebサーバーにFlaskをデプロイします。

Flaskドキュメント。NginxやApacheのようなサーバーの両方)の Deployment Optionsの章 を参照してください。サイトのHTTPサーバーではなくHTTPSサーバーの設定を処理できます。

リストされているスタンドアロンWSGIサーバーは通常、プロキシ転送構成でNginxとApacheの背後にデプロイされ、フロントエンドサーバーがSSL暗号化を処理します。

10
Martijn Pieters
  • flaskアプリケーションでhttps機能またはSSL認証を実行するには、最初に「pyOpenSSL」をインストールしますpythonパッケージを使用して:

     pip install pyopenssl
    
  • 次のステップは、ターミナルで次のコマンドを使用して「cert.pem」および「key.pem」を作成することです。

     openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365
    
  • 生成された「cert.pem」と「kem.pem」をコピーしますflask= application project

  • App.run()にssl_context =( 'cert.pem'、 'key.pem')を追加します

例えば:

    from flask import Flask, jsonify

    app = Flask(__name__)

    @app.route('/')

    def index():

        return 'Flask is running!'


    @app.route('/data')

    def names():

        data = {"names": ["John", "Jacob", "Julie", "Jennifer"]}

        return jsonify(data)

  if __name__ == '__main__':

        app.run(ssl_context=('cert.pem', 'key.pem'))
8

このWebサーバーがテストおよびデモ目的のみの場合。 httpトラフィックをトンネリングするオープンソースのngrokも使用できます。

基本的に、ngrokはパブリックURL(httpとhttpsの両方)を作成し、Flaskプロセスが実行されているポートにトラフィックをトンネルします。

https://ngrok.com/product

セットアップには数分しかかかりません。最初にソフトウェアをダウンロードする必要があります。次に、コマンドを実行します
./ ngrok http [ポート番号your pythonプロセスが実行されています]]

次に、ターミナルでウィンドウが開き、Webアプリにアクセスするためのhttpとhttpsの両方のURLが提供されます。

3