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系自体の資料が不足していたり、
基本的に英語記事しか参照できるものがないので、詳細に差異があるかもしれない...
参考: