私は、このネットワークデバイスがダイジェスト認証と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()
これはピンチでも機能します
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)
コード
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で廃止されました
ビルトイン(開発)サーバーではなく、実際のWebサーバーにFlaskをデプロイします。
Flaskドキュメント。NginxやApacheのようなサーバーの両方)の Deployment Optionsの章 を参照してください。サイトのHTTPサーバーではなくHTTPSサーバーの設定を処理できます。
リストされているスタンドアロンWSGIサーバーは通常、プロキシ転送構成でNginxとApacheの背後にデプロイされ、フロントエンドサーバーがSSL暗号化を処理します。
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'))
このWebサーバーがテストおよびデモ目的のみの場合。 httpトラフィックをトンネリングするオープンソースのngrokも使用できます。
基本的に、ngrokはパブリックURL(httpとhttpsの両方)を作成し、Flaskプロセスが実行されているポートにトラフィックをトンネルします。
セットアップには数分しかかかりません。最初にソフトウェアをダウンロードする必要があります。次に、コマンドを実行します
./ ngrok http [ポート番号your pythonプロセスが実行されています]]
次に、ターミナルでウィンドウが開き、Webアプリにアクセスするためのhttpとhttpsの両方のURLが提供されます。