やあやあ。お仕事の山がひと段落して昼寝していたら怒涛の不機嫌な電話で叩き起こされた僕様ですよ。こんにちは。
SSLのwebページでフォームの値をPOSTで取得しようとしても値が取れないという謎事象。ついでにCSSが取れない、と。検索してもあまり情報当たらなかったから、メモだけ書いておきます。同じことで困った人いたら参考になれば。
環境
- apache 1.3.41 mod_ssl 2.8.31-1.3.41 openssl-0.9.8b
- 色々事情があって上げられないのです察してください
事象
- chrome/IE8 SSLのページでPOSTしてもPOST値が渡らない
- firefoxは大丈夫
- POSTリクエストの直後のGETリクエストが失敗する。apacheのerror_logを見ると、次のようになっている。
Invalid method in request hoge=&fuga=&…. GET /css/nantoka_base.css HTTP/1.1
推察
- この例だと、CSSにPOSTリクエストのパラメタを渡そうとしてしまっているが、CSSファイルはPOSTパラメタなんて受けないので、invalid methodと言ってる気がする(httpd.conf次第だけど)
- 原因はSSLの脆弱性対応でブラウザの動作が変わったこと。POSTデータの投げ方が変わった。このリクエストは受けられない方が標準から外れている。参考リンク
- httpsでバウンダリ文字列が分割されてpostされる (google groups forum)
- https ではじまる Plesk にログインできません。 (google groups forum)
- 通信を保護する「SSL/TLS」の脆弱性を突いたhttps攻撃、研究者が発表へ (セキュリティーホールmemo)
- MS12-006 SSL/TLS の脆弱性のちょっと詳しい解説 (Microsoft 日本のセキュリティチーム)
- たぶんこの、分割してPOSTっていうのに対応できてない。splitting とか fragment とか、その辺がキーワードっぽい。
対策
- chromeのフォーラムにあった「chrome に —
disable-ssl-false- startを付けて起動」を試してみたところ、期待通りの動作になったので、この問題で間違いなさそう - 可能ならApacheとかopensslとかその辺を新しくしちゃえばいい気がする
- やんごとなき理由により出来ない場合(だった)、Microsoftさんの記事の対策が僕の場合は参考になった
- サーバー側で RC4 を優先するよう設定する (Windows Server 2008, Windows Server 2008 R2)
- TLS 1.1 を使用する
- 今回はIE6を捨てられないので RC4のみを使えるようにapacheを設定したところ回避できた。以下のブラウザとりあえずOKぽい
- chrome 16.0.192.77
- IE 8.0.7601.17514
- Fx 3.6.16
- IE 6.0.2900.5512.xpsp_sp3_gdr.080814-1236 (@WindowsXP)
謎のメモ
[root@hagehgae conf]# openssl ciphers -v 'ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM:-SSLv2:!AES:!3DES' DHE-DSS-RC4-SHA SSLv3 Kx=DH Au=DSS Enc=RC4(128) Mac=SHA1 KRB5-RC4-MD5 SSLv3 Kx=KRB5 Au=KRB5 Enc=RC4(128) Mac=MD5 KRB5-RC4-SHA SSLv3 Kx=KRB5 Au=KRB5 Enc=RC4(128) Mac=SHA1 RC4-SHA SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=SHA1 RC4-MD5 SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=MD5SSLCipherSuite ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM:-SSLv2:!AES:!3DES
ほか
- たぶん Lotus Notes も同じ対策ぽい
- みんな困ってない?こんな古いの使ってないって話かな
- もし誰かの役に立てばということでまあご容赦を.
- てか、とりあえずのワークアラウンドとしてはこれでいいと思うんですが、抜本的対策法(ARCFOURに絞らない)をご存じの方いらっしゃったら教えてください。
ものすっごい参考になりました(゚д゚)!
わあ、それは良かったです!書いておくものですねえ。