python flask에 SSL적용하기 (Let’s Encrypt) | 지도 기반 SNS 프로젝트 4 [python, flask, mongodb]

HTTP통신에서 데이터를 암호화해서 보내지 않으면 중간에 패킷을 가로채는 것을 대비해야한다. (공공네트워크 등에서 SSL 미적용 웹은 안 들어가는게 맞음)

 

기존 nginx나 apache에서 했던거처럼 인증서를 발급받고 flask에 연결만 해주면 될것으로 예상한다.

 

Open SSL, pyopenssl 설치

둘다 설치 되어 있다면 해당 과정 패스

$ sudo apt install openssl
$ sudo pip3 install pyopenssl

Let’s Encrypt 인증서 발급

Let’s Encrypt는 무료 SSL 인증서이다. https://letsencrypt.org/ko/

certbot

Let’s Encrypt 인증서를 자동으로 발급받아주는 프로그램 https://certbot.eff.org/

아래 인증서 발급 과정 전 꼭 웹서버를 끄고 진행한다.

$ wget https://dl.eff.org/certbot-auto
#실행을 위한 권한조정
$ chmod a+x certbot-auto
$ ./certbot-auto certonly --standalone -d 도메인
$ cp /etc/letsencrypt/live/도메인/fullchain.pem  /애플리케이션경로/cert/server.crt
$ cp /etc/letsencrypt/live/도메인/privkey.pem  /애플리케이션경로/cert/server.key

 

flask ssl 적용하기

from flask import Flask
from flask_restful import Resource, Api, reqparse
from flask_cors import CORS

class UserApi(Resource):
    def get(self, re_id):
        return {'msg': re_id}

    def post(self, re_id):
        return {'msg': 'post ok'}

    def put(self):
        return {'msg': 'put ok'}

    def delete(self):
        return {'msg': 'delete ok'}


app = Flask(__name__)
CORS(app)
api = Api(app=app)
api.add_resource(UserApi, '/v0.0/user/<re_id>')


if __name__ == '__main__':
    # 하단 cert/server.crt 부분을 작성자 의도에 맞게 수정해서 실행.
    app.run(host="0.0.0.0", port="5000", debug=True, ssl_context=('./cert/server.crt', './cert/server.key'))

 

 

댓글 남기기