2009年02月15日 .htaccess was broken! [長年日記]
_ .htaccess was broken!
lib100サーバのバックアップを、いつもどおりにrsyncで取るが、あるディレクトリから先に進まない。一旦中断して、そのディレクトリを見てみる(ls -al)と、そこに有る.htaccessが有り得ないサイズになっている。あんまりあきれたので、はっきりとは憶えてないが、だいたい15桁ぐらいだったか...。
おそるおそるcatで表示させてみると、4行表示した時点で止まってしまう。おかしい。
とりあえず rm で削除する...が、止まってしまう。CTRL-Cでも中断できない。で、しかたなくリブート。
リブートついでに fsck をかける。その前に.htaccessがどうなってるか見てみると、一応削除はできてる模様。
fsck -v -f -y /dev/hda3
やはり、ファイルシステムの修正が報告されていく...。
fsck完了後に.htaccessをバックアップから戻して(一応)復旧完了。
最近swap or memoryがらみで調子が悪かった(memory.c:100: bad pmd xxxxxxxxの件)のは、超巨大(と見まがう).htaccessをapacheがアクセスした時にswapを食い潰していたためだろうかと思ったり...。
2009年02月19日 delegated STLS=mitm HTTPCONF による https通信におけるhttpヘッダー書き換え [長年日記]
_ delegated STLS=mitm HTTPCONF による https通信におけるhttpヘッダー書き換え
仕組み
- 通常、https(SSL)通信の内容は書き換える事は(当然)出来ない。
- そこで、ブラウザに対してはwebサーバのフリをし、webサーバに対してはブラウザのフリをする事が可能なプロキシサーバ(delegate)を導入し、SSL通信をプロキシ上で一旦平分に復号化し、ヘッダーを書き換えた後に再度SLL通信に戻す。
[browser]---[delegated:8080]---(Internet)---[server] |-+-|......+.......|<------+------->| | | | | | [server]の証明書によるSSL通信 | | | [delegated]内部では通信が復号(平文)化されている | [delegated]の証明書によるSSL通信
delegate-9.8.5(プロキシサーバ)のインストール
現時点での最新版はdelegate-9.9.1であるが、https通信に割り込む機能(mitm : Man In The Middle 機能)がdelegate-9.8.6以降ではバイナリ形式のみでの提供となっている為、あえて古いdelegate-9.8.5を使うものとする。よって、旧バージョンを使う上でのリスクは常に意識しておく必要がある。
なお、有償のライセンス契約(!)を結ぶとmitm機能を含んだ最新版のソースが提供されるとの事。
- ソースの取得(http://www.delegate.org/delegate/)
- tar xvjf delegate-9.8.5.tar.bz2
- cd delegate-9.8.5
- make
- cp src/delegated /usr/local/bin/
サーバ証明書、秘密鍵の作成
https通信に割り込むために、本来はwebサーバからブラウザに送られるサーバ証明書をdelegateがwebサーバに成りすまして送る必要が有る。そのための偽りのサーバ証明書を作成する必要が有る。
- cd /var/spool/delegate-nobody/
- mkdir lib
- chown nobody.nobody lib
- cd lib
- 秘密鍵(server-key.pem)の作成(RSA 2048bit)
openssl genrsa -out server-key.pem 2048
- サーバ証明書(server-cert.pem)の作成(有効期限 20年)
openssl req -x509 -new -key server-key.pem -out server-cert.pem -days 7300
- chown nobody.nobody server-key.pem server-cert.pem
- chmod 600 server-key.pem server-cert.pem
delegatedの起動
下記の例ではUser-Agentを`Fake Browser on CP/M-80'に書き換えている。
/usr/local/bin/delegated \ -P8080 \ ADMIN=root@myh.no-ip.org \ SERVER=http \ PERMIT="*:*:127.0.0.1,192.168.0.0/255.255.255.0" \ RESOLV=cache,file,dns,sys \ STLS=mitm \ HTTPCONF="kill-qhead:User-Agent" \ HTTPCONF="add-qhead:User-Agent:Fake Browser on CP/M-80" LOGFILE=
制限事項
ブラウザ側で受け取るサーバ証明書が本来のサーバから送られる物と異なるため警告ダイアログが出る。
謝辞
delegate作者の佐藤豊 様(通商産業省 工業技術院 電子技術総合研究所 情報 アーキテクチャ部)にはメールによる質問に快くご回答いただきました。感謝いたします。