我有一个网站,我们最近启用了 SSL。在大多数浏览器中,这都运行良好:我们的脚本和样式表使用 HTTPS 导入,大多数浏览器都能成功加载页面。但是,在某些情况下,安全页面会在没有页面样式或 JavaScript 的情况下加载。
我们在装有 Safari 5 的 Mac OS X (v10.6.4) 上持续重现了这个问题。还有另一位用户报告说,在装有 Chrome v5 的 Mac OS X 上也出现了同样的问题,但我发现 Chrome v6 上没有出现任何问题。
Safari 向我报告证书无效,因为它是由“未知”机构 (DigiCert) 签名的。这使情况变得更加复杂,因为 Windows 中的 Safari 没有这个问题。不过,至少在 Safari 中,用户可以告诉浏览器始终信任来自网站的内容,样式表和脚本将正确加载。
大多数遇到此问题的 Chrome 用户都有类似的错误签名。但是,其中一位用户报告说他的浏览器下载的文件内容为空白。在这种情况下,Chrome 的错误控制台会显示文件被解释为正确的类型,但传输时 MIME 类型为空白。
该网站本身运行 Apache,静态内容服务器使用 Lighttpd。
由于这个问题的不一致性,很难确定,因此,任何建议都将受到欢迎。
答案1
事实证明,这是因为我们在静态内容服务器上设置证书的方式存在问题。它是在 Lighttpd 中设置的,因此 Safari 无法从根证书跟踪到中间证书的认证链。我们不得不将证书堆叠在一个文件中,并将服务器证书移动到 pem 文件中。之后,Safari 将对我们静态服务器的请求视为有效,并再次开始向浏览器提供 JavaScript 和 CSS。
答案2
您是否将完整 URL 的引用硬编码到文件中?例如'http://服务器/file.cs‘
如果浏览器拒绝显示安全网页的不安全内容,那么您就会遇到所描述的问题。
答案3
我在使用 nginx 时也遇到了同样的问题。根据 DigiCert 和 nginx 文档,站点证书和中间证书需要连接在一起:
http://www.digicert.com/ssl-certificate-installation-nginx.htm
http://wiki.nginx.org/HttpSslModule
cat 中间证书.crt >> 你的域名.crt
nginx(在您的情况下是 lighttpd)没有像 Apache 那样的单独的 SSLCertificateChainFile 指令,而是需要手动将证书“链接”。