ошибка SSL apache после загрузки, но всё в порядке после systemctl restart

Вопрос или проблема

Это странный случай, у меня есть собранный вручную apache 2.4 на старом сервере CentOS 8, и я наблюдаю странное поведение во время загрузки.
У меня есть файл службы systemd :

[Unit]
Description=Apache 2.4 для Moodle
After=network.target

[Service]
Type=forking
#Type=notify
ExecStart=/usr/local/apache/2.4/bin/apachectl start
ExecStop=/usr/local/apache/2.4/bin/apachectl stop
ExecReload=/usr/local/apache/2.4/bin/apachectl restart

[Install]
WantedBy=multi-user.target

и если я запускаю systemctl start|restart moodleapache, всё работает нормально.
НО
Если я перезагружаю сервер, хотя httpd явно работает (он в таблице процессов), я получаю странную ошибку SSL в браузере :

 Безопасное соединение не удалось
 
Произошла ошибка во время соединения с blahblah.somewhere. SSL
получил запись, которая превышала максимальную допустимую длину.
 
Код ошибки: SSL_ERROR_RX_RECORD_TOO_LONG
 
     Страницу, которую вы пытаетесь просмотреть, нельзя отобразить, потому что достоверность полученных данных не может быть проверена.
     Пожалуйста, свяжитесь с владельцами сайта, чтобы сообщить им об этой проблеме.

Apache работает прекрасно :

 ps -ef | grep http
root        1087       1  0 13:15 ?        00:00:00 /usr/local/apache/2.4/bin/httpd -k start
apache      1104    1087  0 13:15 ?        00:00:00 /usr/local/apache/2.4/bin/httpd -k start
apache      1105    1087  0 13:15 ?        00:00:00 /usr/local/apache/2.4/bin/httpd -k start
apache      1106    1087  0 13:15 ?        00:00:00 /usr/local/apache/2.4/bin/httpd -k start

и он слушает на 80 и 443 :

[carl@avmoodle ~]$ netstat -an | grep 80 | grep LIST
tcp6       0      0 :::80                   :::*                    LISTEN
[carl@avmoodle ~]$ netstat -an | grep 443 | grep LIST
tcp6       0      0 :::443                  :::*                    LISTEN

Хотя интересно, не на IPv4

Я вижу то же самое после systemctl restart moodleapache :

[root@avmoodle ~]# netstat -an | grep 80 | grep LIST
tcp6       0      0 :::80                   :::*                    LISTEN
[root@avmoodle ~]# netstat -an | grep 443 | grep LIST
tcp6       0      0 :::443                  :::*                    LISTEN

Кроме того, теперь ошибка SSL исчезла, и сайт работает нормально.

Это немного ставит меня в тупик. Я всегда могу запустить apache вручную после перезагрузки, но что-то не так. SELinux отключен, так что это не оно :

avmoodle ~]# sestatus
Статус SELinux:                 отключен

э… Есть идеи? Я пропустил какую-то зависимость в своем .service файле?
В логах apache нет ничего интересного, чтобы сказать мне, что происходит

@avmoodle logs]# more error_log
[Пт Дек 13 13:14:44.270580 2024] [mpm_event:notice] [pid 3942:tid 3942] AH00491: пойман SIGTERM, завершение работы
[Пт Дек 13 13:15:02.964278 2024] [mpm_event:notice] [pid 1087:tid 1087] AH00489: Apache/2.4.62 (Unix) OpenSSL/1.1.1k PHP/8.2.26 сконфигурирован -
- продолжаем обычные операции
[Пт Дек 13 13:15:02.988008 2024] [core:notice] [pid 1087:tid 1087] AH00094: Команда: '/usr/local/apache/2.4/bin/httpd'
[Пт Дек 13 13:20:26.006680 2024] [mpm_event:notice] [pid 1087:tid 1087] AH00491: пойман SIGTERM, завершение работы
[Пт Дек 13 13:20:26.092544 2024] [mpm_event:notice] [pid 4001:tid 4001] AH00489: Apache/2.4.62 (Unix) OpenSSL/1.1.1k PHP/8.2.26 сконфигурирован -
- продолжаем обычные операции
[Пт Дек 13 13:20:26.092580 2024] [core:notice] [pid 4001:tid 4001] AH00094: Команда: '/usr/local/apache/2.4/bin/httpd'

и другие логи пустые.

Мне интересно, может быть, это проблема urandom? Какой-то другой временной вопрос?

Есть какие-нибудь предложения?

Ответ или решение

Ошибка SSL Apache после загрузки системы: возможные причины и пути решения

В вашем случае наблюдается интересная ситуация, когда Apache запускается без ошибок после перезагрузки, но возникла ошибка SSL, которая исчезает после ручного перезапуска службы. Это может быть связано с несколькими факторами, включая порядок инициализации сервисов и задержку в предоставлении необходимых ресурсов.

1. Последовательность загрузки сервисов

Убедитесь, что в вашем файле службы указаны правильные зависимости. Например, отсутствует зависимость от ssl-cert или других компонентов, необходимых для корректной работы SSL. Добавьте следующую строку в секцию [Unit]:

Requires=network-online.target
After=network-online.target

Это гарантирует, что сеть полностью инициализирована перед запуском Apache.

2. Параметры конфигурации Apache

Также стоит взглянуть на конфигурацию SSL, находящуюся в файле конфигурации вашего виртуального хоста. Убедитесь, что все пути к сертификатам и ключам заданы правильно и доступ к ним есть на момент запуска службы.

SSLCertificateFile "/path/to/your/certificate.pem"
SSLCertificateKeyFile "/path/to/your/private-key.pem"

3. Проверка сертификатов

Иногда причина кроется в том, что Apache не может получить необходимые криптографические параметры сразу после загрузки, потому что /dev/urandom может работать медленно на старых системах. Попробуйте заменить используемый источник случайных чисел. Убедитесь, что все используемые сертификаты действительны и корректно настроены.

4. Логи и их анализ

Изучите логи Apache более подробно. Возможно, в них скрыты важные подсказки. Обратите внимание на ssl_error_log, если таковой существует. Вы можете настроить уровень ведения логов, добавив следующую строку в конфигурацию Apache:

LogLevel ssl:debug

5. Альтернативные версии OpenSSL

Если проблема не исчезнет, попытайтесь обновить или сменить версию OpenSSL. Иногда обновление OpenSSL решает совместимые проблемы, которые могут вызывать сбои в работе SSL.

6. Внедрение стартового скрипта

Как временное решение, вы можете добавить в ваш файл службы скрипт, который будет ожидать несколько секунд перед запуском Apache, что позволит системе завершить загрузку всех необходимых ресурсов:

[Service]
ExecStartPre=/bin/sleep 10

Заключение

Проблема, с которой вы столкнулись, может иметь несколько причин, связанных с зависимостями или инициализацией службы. Правильная настройка зависимости в вашем файле службы и анализ логов должны помочь в диагностике и устранении проблемы. Убедитесь, что все необходимые компоненты и сертификаты доступны на момент инициализации Apache. Подходите к ситуации с терпением и методично исследуйте каждый аспект. Удачи в решении вашей проблемы!

Оцените материал
Добавить комментарий

Капча загружается...