Я использую сервер Ubuntu 14.04 с Apache2 v2.4.7.
Недавно наш сайт получал ошибки от Chrome, говоря, что нам нужно обновить наши сертификаты. Я только что завершил это ранее на этой неделе, обновив сертификаты SSL, а затем перезапустив Apache. Через пару дней мой клиент вернулся и упомянул, что определенные изображения и файлы больше не доступны через их сервер отчетов. Сервер отчетов использовал HTTPS для доступа к изображениям и файлам.
В моем файле conf есть это, которое не изменилось с тех пор, как я унаследовал этот сервер:
<VirtualHost *:80>
ServerName abc.example.com
DocumentRoot /home/deployer/html/_abc/public
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/files/
RewriteCond %{REQUEST_URI} !^/images/checksheets/
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</VirtualHost>
<VirtualHost *:443>
ServerName abc.example.com
DocumentRoot /home/deployer/html/_abc/public
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ECD....C3-SHA:!DSS
SSLHonorCipherOrder on
SSLCompression off
SSLCertificateFile /etc/ssl/ssl_certificate.crt
SSLCertificateKeyFile /etc/ssl/abc_staging.key
SSLCertificateChainFile /etc/ssl/IntermediateCA.crt
# HSTS (mod_headers is required) (15768000 seconds = 6 months)
Header always set Strict-Transport-Security "max-age=15768000"
<Directory /home/deployer/html/_abc/public>
AllowOverride all
Options FollowSymLinks
# -MultiViews
# Order allow,deny
Require all granted
</Directory>
Единственное, что я сделал на сервере, буквально обновил ssl_certificate и IntermediateCAs и перезапустил Apache, поэтому я не уверен, что произошло. В последний раз сертификат SSL обновлялся, вероятно, около года назад, и способ получения изображений / файлов сервером отчетов не изменился. Я также довольно часто перезапускаю Apache, и раньше это никогда не было проблемой.
По прихоти мой клиент создал новый отчет, используя http
вместо того https
, и это, казалось, сработало отлично.
Мой вопрос на самом деле в том, что могло измениться, чтобы сервер внезапно перестал принимать https
подключения для изображений / файлов?
EDIT: это только запросы GET (нет действий POST / DELETE).
Кроме того, переход к изображению (или файлу) как https://abc.example.com/images/path/to/file.jpg
с HTTPS полностью нормально работает. Но когда сервер отчетов использует ту же ссылку, отображается пустая страница.
Журналы доступа Apache будут отображать указанную выше ссылку как попадание при прямой навигации, но когда сервер отчетов использует ее, и я перехожу к отчету, журналы доступа Apache вообще ничего не показывают.
Предложения по устранению неполадок:
Подтвердите свою среду:
Подтвердите описание проблемы:
Мне любопытно, если ВСЕ https "сломан" или просто "некоторые вещи" недоступны.
Создайте тестовый файл (ПРИМЕР: /var/www/html/myreport/hello.html
) и проверьте, можете ли вы прочитать его одновременно с http и https.
При тестировании используйте один (или оба) из этих инструментов на своем ПК, чтобы проанализировать попытку браузера подключиться (и, таким образом, помочь определить конкретную точку отказа):
Пожалуйста, опубликуйте то, что вы нашли.
PS:
Вот несколько дополнительных советов. В частности, «включить подробное ведение журнала»:
https://www.futurehosting.com/blog/troubleshooting-the-most-common-apache-problems-youll-encounter/
PPS:
я буду НЕ отключите http, пока не решите проблему:
На ваше <VirtualHost *:443>
вы включаете HSTS. Это указывает браузеру внутренне переписывать каждый запрос домена на HTTPS. После этого использовать RewriteCond %{REQUEST_URI} !^/files/
так как все уже должно быть безоговорочно переписано, что дает вам возможность упростить конфигурацию:
<VirtualHost *:80>
ServerName abc.example.com
Redirect permanent / https://abc.example.com/
</VirtualHost>
Проблема с пустой страницей вообще не кажется проблемой на стороне сервера, вызванной вашим Apache. Тот факт, что вы можете получить доступ к URL-адресу с другого компьютера, в значительной степени это доказывает.
Сначала очистите все кеши на «сервере отчетов» и посмотрите, поможет это или нет. Подробностей о том, как работает этот «сервер отчетов», нет, но пустая страница может быть, например, результатом того, что не отображается кэшированное изображение URL-адреса HTTP на странице HTTPS из-за изменения политики смешанного содержимого. Если это так, согласованность между перенаправлением и политикой HSTS может предотвратить такое кеширование в будущем.
Также исправьте все http://
URL-адреса вашего контента на https://
.
Мы разобрались. Хотя с сервером Apache все в порядке, по-видимому, ранее у нас был конкретный фрагмент параметров DH, сохраненный в файле сертификата. Этот фрагмент был добавлен, потому что сервер отчетов, который запрашивает изображения и файлы, работает на Java 6. А Java 6 может обрабатывать только параметры DH размером 1024 бит.
Так что в моем новом ssl_certificate.crt
, Я добавил
-----BEGIN DH PARAMETERS-----
MIGHAoGBAP//////////yQ/aoiFowjTExmKLgNwc0SkCTgiKZ8x0Agu+pjsTmyJR
Sgh5jjQE3e+VGbPNOkMbMCsKbfJfFDdP4TVtbVHCReSFtXZiXn7G9ExC6aY37WsL
/1y29Aa37e44a/taiZ+lrp8kEXxLH+ZJKGZR7OZTgf//////////AgEC
-----END DH PARAMETERS-----
из http://httpd.apache.org/docs/current/ssl/ssl_faq.html#javadh
К сожалению, это понижает рейтинг нашего сертификата с A + до B, но мне не разрешено обновлять сервер Java с 6 до более нового.
Как только я добавил этот фрагмент в свой ssl-сертификат, сервер отчетов смог получить доступ к изображениям через https
!