SSLでエラー ssl_error_rx_record_too_long (-12263)

ブラウザにssl_error_rx_record_too_longと出力されて接続できない。

エラーログには↓のように出る。

[Mon Sep 19 22:46:23 2011] [error] [client xxx.xxx.xxx.xxx] Invalid method in request \x16\x03\x01

一般的な原因

以下のような理由でhttpd.confのSSL設定部分を通ってないことが原因

  • バーチャルホストの設定で
    • ポート番号の設定間違い
    • IPアドレスの設定間違い
    • 別ファイルにしたssl.confのinclude忘れ
    • 意図とは違うバーチャルホストの設定を通っている(後述)
    • 設定は正しいがhttpdの起動に問題 (← 今回はコレ)

設定は正しいのにSSL関連の設定部分を通らないケース

httpd.confに

<IfDefine SSL>
 ・
 ・
</IfDefine>

と書いてあるのに"SSL"がDefineされていなかったというオチ。

-DSSLオプションつきでhttpdを起動しないといけない

/etc/sysconfig/httpd を作成

OPTIONS="-DSSL"

おまけ)意図とは違うバーチャルホストの設定を見てしまう件

ネームベースのバーチャルホストを設定している場合に問題になります

SSL接続時は、ホスト名も暗号化されています。
なので、SSLの設定を読み込んでからでないとホスト名を特定できません。
でもネームベースのバーチャルホストの場合、ホスト名が分からないのでバーチャルホストの設定を読むことができません。

先頭のバーチャルホストの設定が使われます

このとき、とりあえずhttpd.confで最初に定義してあるバーチャルホストの設定が使われます。
(ホスト名が決まったらネームベースバーチャルホストの設定も有効になります)

つまり

目的のバーチャルホストの設定だけがんばってもだめで、先頭のバーチャルホストのSSL設定もちゃんとされている必要があります。