通过 http url 301 永久重定向到 https 的资源嵌入

Resource embed through an http url 301 permanently redirected to an https one

现在我有一个网站,运行 ubuntu 和 nginx。

http://www.huangwenchao.com.cn

我刚刚在上面安装了 SSL 证书:

server {
    listen 80;
    server_name www.huangwenchao.com.cn huangwenchao.com.cn;
    rewrite ^/(.*)$ https://www.huangwenchao.com.cn/ permanent;
}

server {
    listen 443;
    root /var/www/huangwenchao;
    index index.php index.html index.htm;
    server_name www.huangwenchao.com.cn huangwenchao.com.cn;
    ssl on;
    ssl_certificate /home/ubuntu/ssl/mydomain.crt;
    ssl_certificate_key /home/ubuntu/ssl/mydomain.ssl.key;
}

这意味着当我从该域请求 http 时,它被 301 永久重定向到 https。

一开始,浏览器(chrome)告诉该页面有一些不安全的图像、视频和脚本,如下所示:

https://www.huangwenchao.com.cn/2013/11/427-3032.html

这里的一些资源指向我自己的网站,比如一些带有 link 的图片:

http://www.huangwenchao.com.cn/wp-content/uploads/2015/01/tortoisegit-diff.jpg

在此页面中:https://www.huangwenchao.com.cn/2015/01/git-patch.html


问题

所以我想知道:

  1. 当我在页面中嵌入 301 重定向的 http 资源时会发生什么?
  2. 重定向后?资源传输是否加密?
  3. 这种情况下安全吗?或者可能有其他风险?

请各位老师告知,谢谢!

如果有一个或多个资源使用 HTTP 加载,则会出现 "insecure content" 警告,即使这些资源被重定向到 HTTPS。这是有道理的,因为如果访问者受到中间人攻击(攻击者修改未加密的资源),攻击者可以通过像脚本一样更改未加密(HTTP)资源来发送任意代码。

为避免此警告,您必须确保页面中的每个资源都使用 HTTPS 加载:脚本、样式表、图像、字体等。对于 Wordpress,请确保您的网站地址以 "https://" 并确保您在帖子中添加的所有图片都使用 HTTPS 加载。

像您一样使用 301 重定向将所有流量重定向到 HTTPS 是个好主意,因为您确定所有访问者都使用 HTTPS(=加密)浏览。但是您必须确定 HTTPS 的质量,否则某些访问者可能无法访问您的网站。

一些旁注:您可以将 rewrite 规则替换为 return 301 https://$host$request_uri;,我发现您的网站出现证书错误,请务必包含中间证书。您可以在 https://www.ssllabs.com/.

上检查 HTTPS 的质量