
Я размещаю веб-страницу с Apache на Raspberry Pi (Debian) и не могу заставить сервер выдать текущий сертификат. Я сгенерировал самоподписанный SSL-сертификат с помощью /home/pi/ssl/
:
openssl req -new -sha256 -x509 -nodes -days 365 -out example.com.pem -keyout example.com.key
Apache ищет пару файлов .pem
и .key
из файла file /etc/apache2/sites-enabled/owncloud.conf
, который содержит:
SSLCertificateFile /home/pi/ssl/example.com.pem
SSLCertificateKeyFile /home/pi/ssl/example.com.key
Когда я удаляю эти файлы и перезапускаю Apache, я получаю ошибку [FAIL] Reloading web server config: apache2 failed!
. Эта ошибка не возникает при перезапуске после генерации новой пары файлов сертификата, так что Apache, похоже, вызывает сертификат.
Однако сертификат, который появляется в браузерах (Chrome Incognito или FF/Safari в приватных окнах, и даже в браузере на компьютере, который наверняка никогда раньше не запрашивал домен), — это старый сертификат, который я сгенерировал месяц назад — см. ниже:
Есть идеи, почему это происходит?
решение1
Оказывается, выданный сертификат по какой-то причине был сертификатом Apache "snakeoil" по умолчанию. Я установил это следующим образом:
grep -i -r "SSLCertificateChainFile" /etc/apache2/
.. который вернул 2 строки из файла /etc/apache2/sites-available/default-ssl
, ссылающегося на сертификат Snakeoil. Я закомментировал эти строки, и теперь браузер возвращает настроенный сертификат.
решение2
Распространенным источником таких проблем является несколько запущенных экземпляров Apache. Изменения конфигурации подхватываются процессом, который вы (пере)запускаете, но запрос обслуживается старым процессом, который работает со старой конфигурацией.
Остановить службу:
service apache2 stop
Проверьте, доступен ли сайт. Если да, то вы определили причину.
Теперь беги
ps aux | grep apache
Это даст вам список запущенных процессов apache2 и их PID. Убейте их всех (обратите внимание, что эта команда может также возвращать несвязанные процессы с Apache в имени/пользователе и т. д., например Apache Tomcat, вы можете не захотеть убивать их.)
kill <pid>
Запустите ps aux еще раз и убедитесь, что процессы больше не запущены.
Проверьте еще раз, доступен ли сайт. Он не должен быть доступен.
Теперь запустите службу Apache.
service apache2 start
Убедитесь, что новый сертификат обслуживается.
Если вы не хотите убивать процессы, вы можете перезагрузить систему. Это даст тот же эффект.