togatttiのエンジニアメモ

過度な期待はしないでください。旧麹町で働くエンジニアのメモ帳です。

OpenSSLとPython3系でセキュアなWebサーバー構築

今回はオープンソースライブラリのOpenSSLとPythonでセキュアな通信ができるWebサーバーを立ててみた。

Pythonは3.3系。

webサーバーの設定


  • HTTPServerClass

sslモジュールを使いソケットの設定、SSLの種類やCSRの指定を行う。

そして、設定したソケットとIPアドレスを紐付ける。

また、サーバーを稼働するためのコンストラクタを作成。

  • HTTPHandler

HTTPデータを受け取った際に動作するクラス。

用意したHTMLファイルを認識し、それを読み込み表示させる。

  • serve

ここまでで用意したクラスのインスタンスを作成。

また、ホスト/IPとポート番号の設定。

ここまでの設定で、ソケットサーバーをWebサーバーとして利用することができる。

CSRの作成

OpenSSLを事前に使えることを確認したら、下記のようにして、CSRの作成。

今回はtest.pemというファイルを作成してます。

オプションの意味は大まかにこんな感じ。

# -new
新規に証明書要求ファイルを作成

# -x509
X.509形式の(自己)証明書要求ファイルを作成する

# -keyout
オプションで秘密鍵の出力先を指定

# -out
オプションで証明書の出力先

#-days 365
X.509形式の証明書の有効期限を365日とする

#-nodes
秘密鍵を暗号化しないで使う

今回OpenSSLに踏み込んで無いので、細かい所は別の記事を参照して下さい。

デモ

今回はfirefoxで表示してみましたが、
認証局が不明だから、一度警告されました。。

でも、ちゃんとhttpsで接続できてる。

データは暗号化されるし、個人で遊ぶ分にはまぁいいか。

証明書も発行できてる。
認証局の欄はやはり仕方ない...


最後に

TCPであったり、ソケットだったり色々勉強不足があったので、理解が足りなさそうな所は補足する。

Python3系自体の資料が不足していたり、
基本的に英語記事しか参照できるものがないので、詳細に差異があるかもしれない...

参考: