HTTPS从认识到线上实战全记录(8)

https页面出现http链接的资源我们称之为Mixed Content(混合内容),不同浏览器对不同类型的混合内容处理方式不一样,这里我们只讲主流浏览器。现代浏览器(Chrome、Firefox、Safari、Microsoft Edge)基本上都遵守了W3C的Mixed Content规范,将其分为Optionally-blockable和Blockable两类:

Optionally-blockable主要是只危险较小的图片、视频、音频等资源,这类资源即使被人篡改也不会有太大的问题,浏览器默认会加载,展示在控制台会打印警告信息,并且https不是绿色的。

Blockable一般是指除了上述之外所有的被限制加载的http资源,如JS、CSS、iframe等,浏览器会直接禁止加载,并且控制台打印错误信息。

所以网站在升级https时需要特别注意,既然要升级就最好要全站升级,不然很容易出现某些资源由于写死了头导致浏览器无法加载的严重问题。当然也不是没有办法解决,可以通过CSP的upgrade-insecure-requests指令让网页所有http资源自动指向https,限于篇幅,本文不对此展开讲,读者可自行了解CSP、HSTS等相关概念。

继续回到正文,当页面有http资源时,https不是绿色的:

HTTPS从认识到线上实战全记录

HTTPS从认识到线上实战全记录

将所有http链接改成https之后,绿色回来了:

HTTPS从认识到线上实战全记录

3.3.2.2. 域名不匹配

我们还是用前面的例子,假如把nginx中的域名改成,同时hosts也改下,但是证书不变,然后再次打开浏览器访问时提示NET::ERR_CERT_COMMON_NAME_INVALID:

HTTPS从认识到线上实战全记录

所以,DV证书一定要是和域名挂钩的,域名不匹配浏览器会拦截。

3.3.2.3. 根证书不受信任

假如我们前面自制的CA根证书没有导入到操作系统(模拟时可以从Internet选项里面找到证书入口删除之前的证书即可),然后浏览器会提示NET::ERR_CERT_AUTHORITY_INVALID:

HTTPS从认识到线上实战全记录

3.3.2.4. 使用SHA-1签名的证书

SHA-1在许多安全协议中广泛使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec。早在2005年,密码学家就证明SHA-1的破解速度比预期提高了2000倍,虽然破解仍然是极其困难和昂贵的,但随着计算机变得越来越快和越来越廉价,SHA-1算法的安全性也逐年降低,已被密码学家严重质疑。所以,各大浏览器相继宣布将逐步停止对SHA-1签名证书的支持。

使用SHA-1算法浏览器会给出警告

所以在生成证书时一定要指定-sha256参数。

3.3.2.5. 证书刷新不及时

更换证书时最好重启一下nginx然后多刷新2次防止未生效折腾半天;

3.4. 第四步,http自动跳转

网站是升级https了,但是用户又不知道,而且不输入协议头的话浏览器默认都是按照http来加载,所以我们还要对http做301自动跳转处理。

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

上述自动跳转配置会自动携带URL和参数,例如,访问 ?a=1 会自动跳转到 https://www.localhost.com/test.html?a=1 。`

3.5. 第五步,网站代码改造

这个根据实际网站的不同难易程度会有很大不同,例如,如果你是全站升级https,包括各类子域名,那么很简单,全文搜索http,批量替换成//开头即可。但是如果只是部分升级,比如主站升级了,子站没升级,然后主站页面又有各种子站的资源链接、跳转等,这就麻烦了,这时候只能手动处理了。特别是针对子域名比较多的网站,免费证书又都不支持泛域名,全部升级需要一个个去生成证书,然后配置,麻烦死了。

另外,为了安全起见,刚开始的时候建议静态资源的站点(比如图片,很有可能外站引用了这个图片链接)同时保持http和https都可以访问,等时间成熟了再下掉或者做301重定向,否则很容易出现某个资源加载不了导致404的问题。

升级https最麻烦的可能就是这一步了,特别是对于历史悠久的大网站,当然小网站就另当别论了。

其它 4.1. CSP

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/004116efe91cdfe62d6665eb6eb8f102.html