Вопрос или проблема
У меня возникла проблема с SSL сертификатом.
Я использовал сертификат Let’s Encrypt, и всё было в порядке. Теперь я пытаюсь перейти на сертификат от DigiCert и не могу снова заставить его работать. Httpd не запускается.
Буду признателен за любые отзывы, замечания, вопросы и т.д., чтобы направить меня в нужном направлении.
#systemctl restart httpd.service
Работа для httpd.service не удалась, потому что управляющий процесс завершился с кодом ошибки.
Смотрите «systemctl status httpd.service» и «journalctl -xeu httpd.service» для получения подробной информации.
$journalctl -xeu httpd.service
14 июня 16:30:01 www systemd[1]: Запуск HTTP-сервера Apache...
░░ Тема: Началась работа для юнита httpd.service
░░ Определено: systemd
░░ Поддержка: https://access.redhat.com/support
░░
░░ Началась работа для юнита httpd.service.
░░
░░ Идентификатор работы: 35150873.
14 июня 16:30:01 www systemd[1]: httpd.service: Главный процесс завершён, код=выход, статус=1/НЕУДАЧА
░░ Тема: Процесс юнита завершён
░░ Определено: systemd
░░ Поддержка: https://access.redhat.com/support
░░
░░ Процесс ExecStart=, принадлежащий юниту httpd.service, завершился.
░░
░░ Код выхода процесса 'выход' и его статус выхода 1.
14 июня 16:30:01 www systemd[1]: httpd.service: Не удалось с результатом 'exit-code'.
░░ Тема: Юнит завершился с ошибкой
░░ Определено: systemd
░░ Поддержка: https://access.redhat.com/support
░░
░░ Юнит httpd.service вошел в состояние 'неудача' с результатом 'exit-code'.
14 июня 16:30:01 www systemd[1]: Не удалось запустить HTTP-сервер Apache.
░░ Тема: Работа для юнита httpd.service завершилась с ошибкой
░░ Определено: systemd
░░ Поддержка: https://access.redhat.com/support
░░
░░ Работа для юнита httpd.service завершилась с ошибкой.
░░
░░ Идентификатор работы: 35150873, и результат работы - ошибка.
$systemctl status httpd.service
× httpd.service - HTTP-сервер Apache
Загружен: загружен (/usr/lib/systemd/system/httpd.service; включен; предустановка вендора: отключена)
Drop-In: /usr/lib/systemd/system/httpd.service.d
└─php-fpm.conf
Активен: неудача (Результат: exit-code) с ср 2023-06-14 16:10:08 EDT; 6 с назад
Продолжительность: 23ч 48мин 30,301с
Документы: man:httpd.service(8)
Процесс: 3216240 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (код=выход, статус=1/НЕУДАЧА)
Главный PID: 3216240 (код=выход, статус=1/НЕУДАЧА)
Статус: "Чтение конфигурации..."
CPU: 39ms
14 июня 16:10:08 www systemd[1]: Запуск HTTP-сервера Apache...
14 июня 16:10:08 www systemd[1]: httpd.service: Главный процесс завершён, код=выход, статус=1/НЕУДАЧА
14 июня 16:10:08 www systemd[1]: httpd.service: Не удалось с результатом 'exit-code'.
14 июня 16:10:08 www systemd[1]: Не удалось запустить HTTP-сервер Apache.
Содержимое ssl.conf ниже:
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
SSLSessionCache shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout 300
SSLCryptoDevice builtin
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn
SSLEngine on
SSLHonorCipherOrder on
SSLCipherSuite PROFILE=SYSTEM
SSLProxyCipherSuite PROFILE=SYSTEM
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/var/www/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-5]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
ServerName www:443
Содержимое mydomain.conf ниже:
ServerAdmin [email protected]
ServerName www.mydomain.com
ServerAlias mydomain.com
DocumentRoot /var/www/html/mydomain.com
<Directory "/var/www/html/mydomain.com">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog "logs/error_log_mydomain.com"
CustomLog "logs/access_log_mydomain.com" combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =prod.mydomain.com [OR]
RewriteCond %{SERVER_NAME} =mydomain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=перманентный]
</VirtualHost>
<VirtualHost *:443>
ServerName www.mydomain.com
ServerAlias mydomain.com
DocumentRoot /var/www/html/mydomain.com
<Directory "/var/www/html/mydomain.com">
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/prod.mydomain.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/prod.mydomain.com.key
SSLCACertificateFile /etc/pki/tls/certs/DigiCertCA.crt
</VirtualHost>
$http -t
Синтаксис в порядке
$cat /var/log/httpd/error_log
[Ср Июн 14 12:36:20.378579 2023] [core:notice] [pid 3210863:tid 3210863] Политика SELinux включена; httpd работает с контекстом system_u:system_r:httpd_t:s0
[Ср Июн 14 12:36:20.379481 2023] [suexec:notice] [pid 3210863:tid 3210863] AH01232: механизм suEXEC включен (обратный: /usr/sbin/suexec)
[Ср Июн 14 12:36:20.381647 2023] [ssl:emerg] [pid 3210863:tid 3210863] AH02311: Фатальная ошибка инициализации mod_ssl, выход. Смотрите /etc/httpd/logs/ssl_error_log для получения дополнительной информации
AH00016: Конфигурация не удалась
#cat /var/log/httpd/ssl_error_log
[Ср Июн 14 16:30:01.562719 2023] [core:notice] [pid 3216760:tid 3216760] Политика SELinux включена; httpd работает с контекстом system_u:system_r:httpd_t:s0
[Ср Июн 14 16:30:01.563467 2023] [suexec:notice] [pid 3216760:tid 3216760] AH01232: механизм suEXEC включен (обратный: /usr/sbin/suexec)
[Ср Июн 14 16:30:01.565223 2023] [ssl:emerg] [pid 3216760:tid 3216760] AH02572: Не удалось настроить хотя бы один сертификат и ключ для www:443
[Ср Июн 14 16:30:01.565244 2023] [ssl:emerg] [pid 3216760:tid 3216760] Ошибка библиотеки SSL: ошибка:0A0000B1:SSL routines::нет сертификата
[Ср Июн 14 16:30:01.565249 2023] [ssl:emerg] [pid 3216760:tid 3216760] AH02312: Фатальная ошибка инициализации mod_ssl, выход.
AH00016: Конфигурация не удалась
Та же ошибка здесь, после обновления с Fedora 38 на 40:
$ sudo systemctl restart httpd
Работа для httpd.service не удалась, потому что управляющий процесс завершился с кодом ошибки.
Смотрите «systemctl status httpd.service» и «journalctl -xeu httpd.service» для получения подробной информации.
Вводя команду $ systemctl status httpd.service
, я читаю:
(2)Нет такого файла или директории: AH02291: Невозможно получить доступ к директории '/etc/httpd/logs/' для основного файла журнала ошибок
На самом деле, вводя ls -l /etc/httpd/
, возвращается:
lrwxrwxrwx 1 root root 19 1 ago 02.00 logs -> ../../var/log/httpd
И я заметил, что папка /var/log/httpd
не существовала, поэтому, выполнив:
sudo mkdir /var/log/httpd
systemctl start httpd.service
systemctl status httpd.service
проблема была решена!
Ответ или решение
Неудовлетворительная работа Apache HTTP Server: Решение проблем с SSL-сертификатом
Введение
Недавно вы столкнулись с проблемой при переключении с сертификата Let’s Encrypt на сертификат, выданный компанией DigiCert, что привело к невозможности запуска Apache HTTP Server (httpd). В этом ответе мы рассмотрим шаги по диагностике и устранению проблемы на основе предоставленных вами данных.
Описание проблемы
Проблема была выявлена после выполнения команды для перезапуска сервера Apache:
systemctl restart httpd.service
Вы получили сообщение об ошибке:
Job for httpd.service failed because the control process exited with error code.
В дополнение вы проверили состояние службы с помощью:
systemctl status httpd.service
Это показало, что служба не запущена из-за ошибки с кодом выхода 1, а детализированный журнал ошибок из ssl_error_log
указал на следующие критические сообщения:
AH02572: Failed to configure at least one certificate and key for www:443
SSL Library Error: error:0A0000B1:SSL routines::no certificate assigned
Анализ
На основе предоставленных вами логов и конфигурации можно выделить несколько ключевых аспектов:
-
Отсутствие сертификатов: Ошибка «no certificate assigned» указывает на то, что Apache не может найти указанные вами SSL-сертификаты или ключи.
-
Пути к сертификатам: Ваша конфигурация указывает на следующее:
SSLCertificateFile /etc/pki/tls/certs/prod.mydomain.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/prod.mydomain.com.key
SSLCACertificateFile /etc/pki/tls/certs/DigiCertCA.crt
Убедитесь, что все файлы существуют по указанным путям и имеют корректные разрешения.
-
Проверка логов: Вы уже выполнили проверку логов Apache, которые указали на проблему с инициализацией модуля SSL. Кроме того, стоит проверить логи SELinux, так как они могут блокировать доступ к файлам.
Решение проблем
-
Проверка файлов сертификатов:
-
Убедитесь, что файлы сертификатов и ключей присутствуют на сервере. Вы можете выполнить следующее:
ls -l /etc/pki/tls/certs/prod.mydomain.com.crt ls -l /etc/pki/tls/private/prod.mydomain.com.key ls -l /etc/pki/tls/certs/DigiCertCA.crt
-
Если какой-либо из файлов отсутствует, вам нужно либо восстановить его, либо загрузить заново сертификаты от DigiCert.
-
-
Проверка прав доступа:
-
Убедитесь, что файлы сертификатов имеют правильные права доступа. Обычно ключевые файлы должны быть доступны только для чтения пользователю root:
sudo chmod 400 /etc/pki/tls/private/prod.mydomain.com.key
-
-
Перезапуск Apache:
-
После выполнения всех вышеуказанных проверок попробуйте снова перезапустить httpd:
sudo systemctl restart httpd.service
-
-
Логи SELinux:
-
Если проблема сохраняется, рассмотрите возможность временного отключения SELinux для тестирования:
sudo setenforce 0
-
Если это решает проблему, вам, возможно, потребуется настроить SELinux для корректной работы с новыми сертификатами.
-
Заключение
Следуя приведённым рекомендациям, вы должны быть в состоянии устранить проблему с запуском Apache HTTP Server после замены SSL-сертификатов. Помните, что важно регулярно проверять журналы и вести мониторинг за окружением сервера для предотвращения будущих проблем. Если проблема останется, рассмотрите возможность обращения в поддержку DigiCert или на форумы сообщества, чтобы получить уточнения по конкретным подключениям или конфигурациям.
Если у вас есть дополнительные вопросы или нужна дальнейшая помощь, не стесняйтесь задавать их.