FlaskをHTTPSに対応させる簡単な方法!

FlaskでサクッとHTTPSを使いたい

Flaskはかなり手軽にWebアプリケーションを書くことが可能なフレームワークである。しかし、HTTPSに対応させようとするとApacheやNginxなどにデプロイさせる必要が出てくる。だが、ここではFlask単体でHTTPSに対応させる方法を紹介する。

VPSにドメインが設定されていることが前提。設定されていない場合はConoHa VPSにドメインを設定する簡単な方法を参考に設定する。

サーバースペック

  • Conoha VPS
  • memory 2GB/ CPU 3 Core
  • SSD 50GB
  • Ubuntu 18.04(64bit)

Let’s EncryptでSSL証明書を発行する

まず、Let’s Encryptをインストールする。
下のとおりにやればOK

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot

次にSSL証明書を発行する。
(この時、80番ポートと443ポートを開放しておくこと。また、この2つのポートを使用するプログラムは全て停止しておくこと)

sudo certbot certonly --standalone -t
# 実行後は指示に従ってメールアドレスを設定したり、ドメイン名を入力したりする。

SSL証明書の発行が完了すると、
/etc/letsencrypt/live/[設定したドメイン名]/に

cert.pem
chain.pem
fullchain.pem
privkey.pem
README

が生成される。

最小のHTTPS対応サーバー

HTTPSに対応したFlaskは次の様に書けばいい

from flask import Flask
import ssl

app = Flask(__name__)
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
context.load_cert_chain('/etc/letsencrypt/live/[設定したドメイン名]/cert.pem',
                        '/etc/letsencrypt/live/[設定したドメイン名]/privkey.pem')

@app.route('/')
def index():
    return 'Hello'

if __name__=="__main__":
    app.run(host='[設定したドメイン名]',port=443,threaded=True,ssl_context=context)

443番ポートの開放を忘れないように!あと、実行には管理者権限が必要!

以上


記事の内容が役に立ちましたら
下記のボタンまたは「PAh4HSfQk3EMGTQcix8VWTyWxZjJw7jahK」へDonateをお願いします!