ssl.confに記述したmod_rewriteの設定で、HTTPのTRACEメソッドが無効になっているかを確認する方法
ssl.confに記述したmod_rewriteの設定で、HTTPのTRACEメソッドが無効になっているかを確認する必要が出てきた。
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_METHOD} ^TRACE RewriteRule .* - [F] </IfModule>
例えば上記のような設定をssl.confに記述したときに、mod_rewriteの設定が意図通りになっているか確認したいとする。SSLを使っていなければ、telnetで以下のような操作をすれば確認できるんだけど、SSLを使っている時はどうすれば良いか分からなかった。
$ telnet www.hoge.jp 80 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. TRACE / HTTP/1.0 TEST: TRACE_TEST HTTP/1.1 403 Forbidden Date: Tue, 09 Dec 2008 13:56:35 GMT Server: Apache Accept-Ranges: bytes Content-Length: 5044 Connection: close Content-Type: text/html; charset=UTF-8 .... Connection closed by foreign host.
- telnetで調べたいホストの80ポートにアクセス
- HTTPのTRACEメソッドでリクエストを書く
- 403コードが返ってくればTRACEメソッドが無効になっていると判断できる。200などのコードが返ってきたら有効になっている。
SSLを使っている場合は、HTTPのプロトコルでサーバーとお話をする前に、SSLでサーバーとお話をしなくてはならないため、telnet越しにお話するのはかなり面倒くさい。そんなときは、opensslコマンドのs_clientを使うと良い。
まずは、opensslコマンドを以下のように使う。
$ openssl s_client -host www.hoge.jp -port 443 .... Timeout : 300 (sec) Verify return code: 18 (self signed certificate) ---
勝手にSSLで話してくれ、HTTPでお話できるところまで進めてくれる。
後はtelnetと同じようにHTTPでお話すれば、TRACEメソッドが無効になっているかどうかが確認できる。
$ openssl s_client -host www.hoge.jp -port 443 .... Timeout : 300 (sec) Verify return code: 18 (self signed certificate) --- TRACE / HTTP/1.0 TEST: TRACE_TEST HTTP/1.1 403 Forbidden Date: Tue, 09 Dec 2008 13:56:35 GMT Server: Apache Accept-Ranges: bytes Content-Length: 5044 Connection: close Content-Type: text/html; charset=UTF-8 .... Connection closed by foreign host.
かなり便利だったのでメモ。