본문 바로가기

Back/Python

[Python][flask] 개인 https 서버 구성

일단 이글의 배경으론 WebRTC를 이용하여 개발환경을 구성하던중 발생한 이슈를 정리함.

일단 데스크탑엔 웹캠 및 다른 입력장치가 없어 뭔가 확인해 볼 만한 장치가 없으므로 데스크탑으로 띄운 페이지를 모바일로 읽어서 해결해 보고자함.

그래서 예제를 보면서 서버를 구성하는데 오류발생.

cannot read property 'getusermedia' of undefined

https://github.com/ant-media/Ant-Media-Server/issues/1200

 

Cannot read property 'getUserMedia' of undefined · Issue #1200 · ant-media/Ant-Media-Server

hello i have js error on chrome 74 on url => http://vps676372.ovh.net:5080/WebRTCApp/ error => webrtc_adaptor.js:85 Uncaught TypeError: Cannot read property 'getUserMedia' of undefine...

github.com

 

답을 찾아보니 http에선 브라우저가 막아놨고 https에서 제공한다고 한다.

둘의 차이나 이론적인 방법은 각설하고, 다음과 같은 대안을 내놓았다.

 

  1.  AWS s3에 올리고 cloudfront로 https 로 변경 -> 한번올리는데 시간이 오래 걸리니 패스, 다 완성된 후에 고려
  2.  web server for chrome -> 이론상으론 될것 같은데 이상하게 안열리며.. pass
  3.  할줄아는게 파이썬이니 파이썬으로 띄우기, -> 성공 다만 JinJa2 를 이용하다 보니 경로설정을 잡아줘야 한다. 

해결방법은 다음과 같다.

wsl의 openssl을 이용 crt, key 파일을 생성후 플라스크를 이용하여 https 서버를 구성

 

Openssl 사용

https://m.blog.naver.com/espeniel/221845133507

 

OpenSSL 로 개인키 발급 및 SSL 인증서 생성 #1

개요 웹 서비스에 https 를 적용할 경우 SSL 인증서를 VeriSign, Thawte, GeoTrust 등에서 인증서...

blog.naver.com

 

플라스크는 ssl을 import 한후 경로를 지정해 설정해준다.

from flask import Flask, render_template

import ssl

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World"

@app.route("/page1")
def page1():

    return render_template('./index.html')
    

if __name__ == "__main__":

    ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS)
    ssl_context.load_cert_chain(certfile='server.crt', keyfile='server.key', password='****')

    app.run(host="0.0.0.0", port=2500, ssl_context=ssl_context, debug=True)

이후 해당 포트로 접속할때 https로 접근할 수 있다. 

개인 인증서라 그런지 주의 요함이 뜸.