このエントリがおもしろそうだったのでOSX でやってみた。
実際にやったこと。
Apache+mod_sslを openssl で用意しました。
オレオレ証明書を使ってHTTPSサーバーを作った
今回はOSX の組み込みApacheの設定変更で対応することにする。
本来、cert (certification)は、認証局に署名して貰うのだが、今回は自分で自分を証明する。オレオレ証明書を使う
秘密鍵(server.key)の作成
openssl genrsa 2048 > server.key
公開鍵(server.csr)の作成
openssl req -new -key server.key > server.csr
デジタル証明書(server.crt)の作成
openssl x509 -in server.csr -days 365 -req -signkey server.key > server.crt
実験用なのでパスフレーズは省略しておいた。
10年分
有効期限を十年にする場合は、-days
をもっと長く採る
-days 3600
できあがったファイルは次のようなもの。
takuya@rena:~/Desktop/ssl$ ls -l total 16 -rw-r--r--+ 1 takuya staff 1111 4 14 16:34 server.crt -rw-r--r--+ 1 takuya staff 956 4 14 16:33 server.csr -rw-r--r--+ 1 takuya staff 1766 4 14 16:33 server.key
VirtualHostディレクティブに以下を記述
Apacheの設定を書き換える。
<VirtualHost _default_:443> ##中略 SSLCertificateFile "/usr/local/etc/_ssl_keys/server.crt" SSLCertificateKeyFile "/usr/local/etc/_ssl_keys/server.key" </VirtualHost>
設定ファイルのシンタックステストをする。
takuya@rena:~/Desktop$ apachectl configtest httpd: Could not reliably determine the server's fully qualified domain name, using rena.local for ServerName Syntax OK
おっけー、じゃぁRestartするよ。
takuya@rena:~/Desktop$ apachectl restart
じゃぁ。通信してみる
curl -k https://127.0.0.1/
tcpdumpでパケットをキャプチャする
sudo tcpdump -i lo0 -s 0 -w packet.dump
tcpdump の -s オプションでめいっぱいログとって、-- でインタフェースを指定。こんかいは127.0.0.1にアクセするだけだからコレで十分。
あとは適当に通信してー
open -a safari https://127.0.0.1/
ログファイルを確認する
tcpdump -r packet.dump
パケットファイルが準備できた
Wireshark を準備する。
brew install wireshark --with-gtk+
brewで入れるとXQurartz版になるけどまぁいいさ。
パケットを読み解く
open -> file -> packet.dup
当然パケットは暗号化されてるので、それをつらつら確認 Protocol がTLSv1になってた。
サーバーの秘密鍵を使ってデコードする
preference -> protocol -> ssl
で、サーバーキーリストをeditで追加する。
これでパケットのヘッダが見たら成功
見えました。よかったです。
Blinkなブラウザたちで試したらうまくいきませんでした。WebkitなSafariだと綺麗に見えました。たぶん暗号化の強度のFlagが違うんだろうけど、今日はもう疲れたのでここまで、
情報セキュリティのIPAの試験でも受けようかと思ったけど勉強してない。