JavaScript и CSS не загружаются в некоторых браузерах через SSL
У меня есть веб-сайт, на котором мы недавно включили SSL. В большинстве браузеров это работает нормально: наши скрипты и таблицы стилей импортируются с использованием HTTPS, и большинство браузеров успешно загружают страницы. Однако в некоторых случаях защищенные страницы загружаются без стилизации страницы или JavaScript.
Единственное место, где мы постоянно это воспроизводили, - это Mac OS X (v10.6.4) с Safari 5. У нас есть другой пользователь, который сообщает о проблемах в Mac OS X с Chrome v5, но я не вижу проблем с Chrome v6.
Safari сообщает мне, что сертификат недействителен, так как он подписан "неизвестным" органом (DigiCert). Это усложняет ситуацию, поскольку Safari в Windows не имеет этой проблемы. Однако, по крайней мере, в Safari пользователь может указать браузеру всегда доверять контенту с сайта, и таблицы стилей и скрипты будут загружаться соответствующим образом.
Большинство пользователей Chrome, которые сталкиваются с этой проблемой, имеют похожую подпись ошибки. Однако один из них сообщает, что его браузер загружает файлы с пустым содержимым. В этих ситуациях консоль ошибок Chrome указывает, что файл был интерпретирован как правильный тип, но передан с пустым типом MIME.
Сам сайт работает под управлением Apache, а сервер статического контента использует Lighttpd.
Непоследовательность в этом вопросе затрудняет определение, поэтому любые предложения будут оценены.
3 ответа
Это оказалось проблемой с тем, как мы настроили сертификат на нашем статическом контент-сервере. Он был настроен в Lighttpd таким образом, чтобы Safari не мог следовать цепочке сертификации до промежуточного сертификата из корневого сертификата. Нам пришлось сложить сертификаты в один файл и переместить сертификат сервера в файл pem. После этого Safari обработал запросы к нашему статическому серверу как действительные и снова начал предоставлять JavaScript и CSS браузеру.
Вы поместили жестко закодированные ссылки на файлы с полным URL? например, ' http://server/file.cs'
Если браузер отказывается показывать небезопасный контент для защищенной веб-страницы, вы получите описанную проблему.
У меня была такая же проблема с nginx. Согласно DigiCert и документам nginx, сертификат сайта и промежуточный сертификат должны быть объединены:
http://www.digicert.com/ssl-certificate-installation-nginx.htm
http://wiki.nginx.org/HttpSslModule
cat промежуточный_сертификат.crt >> your_domain_name.crt
У nginx (и в вашем случае lighttpd) нет отдельной директивы SSLCertificateChainFile, такой как Apache, и вместо этого необходимо вручную "связывать" сертификаты.