Md. Minhazul Haque
Minhaz's Blog

Minhaz's Blog

Run Flask App with Let's Encrypt SSL Certificate

Run Flask App with Let's Encrypt SSL Certificate

Md. Minhazul Haque's photo
Md. Minhazul Haque
·Jul 2, 2017·

2 min read

Flask supports serving in HTTPS mode when provided with valid certificate and key file. I have been using Let's Encrypt which automatically manages all the SSL keyfiles and certificates used on my server. I had troubles setting up preconfigured SSL keys and certificates with my Flask app. Although I had it figured out later.

What you need to do is provide an ssl_context option with the Flask app which requires 2 things. One is the issued SSL certificate and the other is the key file. Let's Encrypt puts them all in /etc/letsencrypt/live/yourdomain.com. So you need to find the correct one and set it up with Flask. Here is my setup.

import requests
from flask import Flask, request

app = Flask(__name__)

@app.route('/', methods=['GET'])
def serve():
    return "Hello world", 200

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=8080, ssl_context=('/etc/letsencrypt/live/mdminhazulhaque.io/fullchain.pem', '/etc/letsencrypt/live/mdminhazulhaque.io/privkey.pem'))

As you can see, fullchain.pem is the certificate and privkey.pem is the keyfile. So I ran the above example and checked if the SSL is working with openssl tool.

openssl s_client -quiet -connect mdminhazulhaque.io:8080
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = mdminhazulhaque.io
verify return:1
read:errno=0

I got errno=0 which means Flask is working fine with SSL. :D

 
Share this