5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

bottleのHTTPサーバーを3分でSSL化する

Last updated at Posted at 2020-06-24

元のコード

例えば、以下のようなソースコードがあったとして、

http_server.py
from bottle import route, run

@route("/")
def root():
    return "Server running"

if __name__ == '__main__':
    run(host="0.0.0.0", port=80)

必要なモジュールをインストール

pip install gevent

鍵を準備

Let's Encryptでやるときはここを見ると良さそう
https://certbot.eff.org/lets-encrypt/ubuntufocal-nginx
オレオレ証明書を使うときはここ
https://qiita.com/ll_kuma_ll/items/13c962a6a74874af39c6
localhostで作りたいときはここ
https://qiita.com/rkunihiro/items/530b5dc685bd3bff2082

コードをちょっと変える

こうする

https_server.py
from bottle import route, run, ServerAdapter
from gevent.pywsgi import WSGIServer

CERT = "<公開鍵>"
KEY = "<秘密鍵>"

class SSLWebServer(ServerAdapter):
    def run(self, handler):
        srv = WSGIServer((self.host, self.port), handler,
                         certfile=CERT,
                         keyfile=KEY)
        srv.serve_forever()

@route("/")
def root():
    return "Server running"

if __name__ == '__main__':
    run(host="0.0.0.0", port=443, server=SSLWebServer)

Let's Encryptで鍵を用意した場合、
公開鍵は/etc/letsencrypt/live/<ドメイン>/cert.pem
秘密鍵は/etc/letsencrypt/live/<ドメイン>/privkey.pem
にある

注意点

UNIX系OSで1024未満のポートをバインドできるのはrootユーザーのみなので、実行するときは

sudo python3 https_server.py

とする必要がある
しかし、一般ユーザー権限でpip installした場合、モジュールは$HOME/.local/lib/python3.8/site-packagesに格納される。そして、root権限でPythonを実行した場合、上記のパスをモジュールパスに含めないため、ModuleNotFoundErrorを起こしてしまう。
対策として、

  • root権限でpip installし直す必要がある
  • 以下のようにモジュールパスに上記パスを追加する
from sys import path, version
path.append("/home/ubuntu/.local/lib/python{ver}/site-packages".format(ver=".".join(version.split(".")[:2])))
5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?