Thursday, March 4, 2021

Run flask app in localhost with SSL

  • ปกติทดลองเขียน RESTFul โดย Python อาศัย FLASK ทำเป็น web server  ไปแล้วรอบหนึ่งโปรเจค https://juuier.blogspot.com/2020/09/restful-api-python.html
  • แต่โปรเจคนี้  คือ อยากให้ FLASK รัน https ได้โดย cer fake นี่แหละ โดยไม่ต้องทำอะไรให้ยุ่งยาก

Environment

  • Ubuntu 18.04
  • Python3

Pre

  • $ pip flask
Sovled 1 : Run Flask with ssl_context='adhoc'
  • ปกติรัน app แบบนี้

if __name__ == '__main__':

    app.run(port=1234)

  • เปลี่ยนเป็น

app.run(host='127.0.0.1', port='1234', debug=True, ssl_context=('adhoc'))

  • แบบนี้มันจะรันเว็บที่ https://localhost:1234
  • ถ้าเราไม่ระบุ port ค่าเริ่มต้นจะเป็น 5000

Solved 2 : Using Self-signed .pem certificate (Subject Type=CA)

  • สร้าง cer .pem ด้วย openssl หาวิธีติดตั้ง openssl เอาเองนะคับ
  • เปิด terminal แล้ว เข้าไปยังพาธไฟล์ .py ของเรา
  • และใช้คำสั่งสร้าง cer ปลอมคือ

$ openssl req -x509 --newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365

  • จากนั้นใน .py เราให้เขียน ประมาณด้านบน แต่เพิ่ม .pem ที่เราสร้างไว้เองเข้าไป

app.run(host='192.168.1.127', port='8282', debug=True, ssl_context=('cert.pem', 'key.pem'),)

Solved 3 : Using Self-signed .crt certificate

$ openssl genrsa -des3 -out server.key 1024
$ openssl req -new -key server.key -out server.csr
$ cp server.key server.key.org
$ openssl rsa -in server.key.org -out server.key
$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

  • ใน .py เขียนประมาณนี้

app.run(
    host='192.168.1.127', port="8282", debug=True,
    ssl_context=('server.crt', 'server.key')
)

Related

  • https://juuier.blogspot.com/2020/09/restful-api-python.html

Ref

  • https://stackoverflow.com/questions/59861685/how-to-run-flask-app-in-localhost-with-ssl

1 comment:

  1. ถ้าเป็น Windows ต้องเขียนยังไงครับ

    ReplyDelete

Popular Posts