Проблема «SSL input filter read failed» и её решение
Опубликовано 06.09.2010
Потратил половину своих выходных на выяснение причин неработоспособности прикрученного мной к одному апачу 2.2.16 модуля mod_ssl. Скрипт, вроде бы нормально работающий на 80 порту, напрочь отказывался работать через https, при этом выдавалась пустая страница, а в логах при перезапуске апача появлялась строчка, свидетельствующая лишь о том, что используется самоподписанный сертификат:
[warn] RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
Включив подробные логи (LogLevel debug), получил для каждого запроса на пару порядков больше информации, из которой наиболее полезным оказалось вот это:
[Sat Sep 04 20:43:54 2010] [debug] ssl_engine_io.c(1893): OpenSSL: I/O error, 5 bytes expected to read on BIO#8074a22e0 [mem: 8074e5000] [Sat Sep 04 20:43:54 2010] [info] [client XX.XX.XX.XX] (70007)The timeout specified has expired: SSL input filter read failed.
Безрезультатно промаявшись с этим еще пару часов, отправился спать с мыслью поставить потом nginx в качестве SSL-прокси.
В понедельник программисты посоветовали обратить внимание на .htaccess, в котором, в частности, активно эксплуатировался mod_rewrite и устанавливались настройки php. Временное удаление .htaccess вызвало ошибку 403 по нужному адресу (это был отличный результат, поскольку ранее никаких ошибок не выдавалось вообще). А отключение php_value error_reporting 0
, приведшее к заполнению экрана ошибками PHP, окончательно развеяло все сомнения: проблема была вовсе не в mod_ssl, а в пользовательском скрипте; mod_ssl ничего не получал и возвращал ошибку.
Мораль на будущее: надо быть проще и искать корни очевидных ошибок на поверхности, а nginx все равно не помешает.
Note for english-speaking visitors with the same error from google: try to check your php scripts or other backends, they can fail and not return any data to mod_ssl