#Что означает ошибка
Сертификат недействителен
Если сертификат на Apache просрочился, браузеры показывают NET::ERR_CERT_DATE_INVALID. Обновление зависит от источника: Let's Encrypt обновляется через certbot, коммерческий сертификат нужно перевыпустить и заменить файлы.
Сначала проверьте дату окончания и то, какой файл читает Apache.
Частая причина — certbot продлил сертификат, но Apache не перечитал конфигурацию.
Истёкший сертификат вызывает предупреждения у посетителей. Обновите его через certbot, проверьте автоматическое продление и перезагрузите Apache.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Не работает автопродлениеCron. | Истёк. | Настройте. |
| Порт 80 закрытПроверка. | Ошибка. | Откройте. |
| Неверный VirtualHostДомен. | Ошибка. | Исправьте. |
| Старый certbotВерсия. | Ошибка. | Обновите. |
#Пошаговое решение
- Проверьте срокНа рабочем компьютере или сервере выполните
openssl s_client -connect example.ru:443 -servername example.ru(замените домен); для просмотра даты сертификата используйте передачу вывода вopenssl x509 -noout -dates. СравнитеnotAfterс текущей датой. Если сервер отдаёт другой сертификат по SNI, исправляйте выбор виртуального хоста, а не продлевайте чужой сертификат. - Найдите используемые файлыПо SSH найдите действующие директивы Apache
SSLCertificateFileиSSLCertificateKeyFileчерезsudo grep -R "SSLCertificate" /etc/apache2(на RHEL путь другой). Сопоставьте файлы с нужным виртуальным хостом*:443, запишите текущие пути и сохраните копию конфигурации. Для Let’s Encrypt сертификат нередко лежит в/etc/letsencrypt/live/имя_домена/. - Обновите сертификатЕсли используется Certbot и домен действительно обслуживается им, сначала выполните
sudo certbot certificates, затемsudo certbot renew --dry-run, чтобы проверить возможность автоматического продления. Если тест не прошёл, читайте его ошибку о DNS, доступе к порту 80 или DNS-01; не запускайте бесконечноrenew. Для ручного сертификата продлевайте его у своего удостоверяющего центра.Linux · Терминал (Bash)КомандаНужен sudoПроверка продления.sudo certbot renew --dry-run - Проверьте конфигурациюПосле успешного получения нового сертификата выполните
sudo apachectl configtest(илиapache2ctl configtest), убедитесь вSyntax OK; затемsudo systemctl reload apache2илиhttpdсогласно системе. Если применить не удалось, верните сохранённый виртуальный хост, а не отключайте SSL. - Перезагрузите ApacheОткройте HTTPS-страницу с другого устройства и повторно проверьте серверный сертификат через OpenSSL с нужным
-servername. Убедитесь, что дата продления изменилась, цепочка доверия полная и сайт открывается без предупреждений; при несоответствии проверьте балансировщик или CDN, который может предъявлять свой сертификат.
#Проверка
Выполните echo | openssl s_client -connect сайт:443 -servername сайт 2>/dev/null | openssl x509 -noout -dates. Для файла: openssl x509 -in /etc/letsencrypt/live/сайт/cert.pem -noout -enddate. Сравните с датой в браузере. Проверьте пути SSLCertificateFile и SSLCertificateKeyFile в конфигурации: grep -R "SSLCertificate" /etc/apache2/.
#Let's Encrypt
Выполните sudo certbot renew --dry-run, затем sudo certbot renew. Если ошибка проверки, убедитесь, что порт 80 открыт, а .well-known/acme-challenge доступен. Перезапустите: sudo systemctl reload apache2. Добавьте хук: --deploy-hook "systemctl reload apache2". Проверьте таймер: systemctl list-timers | grep certbot.
#Коммерческий сертификат
Сгенерируйте CSR (openssl req -new -newkey rsa:2048 -nodes -keyout site.key -out site.csr), получите сертификат у центра сертификации, установите SSLCertificateFile (сертификат) и SSLCertificateChainFile/SSLCACertificateFile (цепочка). Проверьте конфигурацию: apachectl configtest и перезагрузите.
sudo certbot renew --dry-runsudo certbot renewsudo apachectl configtest && sudo systemctl reload apache2