一起来探索宇宙的奥秘
To explore universe
打开一切科学的钥匙都毫无异议地是问号,我们大部分的伟大发现都应当归功于如何?而生活的智慧大概就在于逢事都问个为什么?
——巴尔扎克
一
这段时间因为chrome浏览器安全策略的升级,导致了我们的一个网站无法正常访问。具体来说chrome浏览器现在对https协议使用TLS1 TLS1.1协议会报警。
Chrome 72不再支持TLS 1.0和TLS 1.1,这意味着当用户访问遗留有TLS 1.0或1.1证书的HTTPS站点时,Chrome会在开发人员控制台显示错误,但不会阻止用户访问站点。从Chrome 81开始,将会阻止用户访问。
因此,我们也跟着升级了nginx配置。这里有个小问题需要注意,比较老版本的openssl对TLS1.2支持不友好,因此编译的时候最好用1.1+版本。
然而,升级之后我们的网站偶尔会报上图中的错误。
这就有意思了,从网站的协议安全方面来说,要么是安全的,要么是不安全的,怎么会一会安全,一会不安全呢?
二
基于报错——“您与此网站间建立的浏览器不安全”,我首先想到会不会是nginx关于https协议的配置是不是有问题。我仔细查看了nginx错误日志,结果毫无头绪。之后我又把nginx的配置都核对了一遍。主要的指令如下:
ssl_protocols
ssl_ciphers
ssl_prefer_server_ciphers
发现都无法解决问题。那么问题在哪里呢?我陷入了困惑。
三
突然灵光乍现,去查了一下开发者工具的安全选项。看到如下提示,
This page is not secure (broken HTTPS).
Resources - active content with certificate errors
You have recently allowed content loaded with certificate errors (such as scripts or iframes) to run on this site.
这就很明显了。网站中有个iframe的连接不安全。因为这个iframe使用的域名中是自签名的证书。将这个自签名证书的根证书导入受信任的证书后解决问题。
回到第一节中提到的问题:
从网站的协议安全方面来说,要么是安全的,要么是不安全的,怎么会一会安全,一会不安全呢?
通过分析我发现,我们网页中嵌入的自签名的链接的iframe,正常情况下,是不会正常加载的。通过开发者工具,网络选项发现,status字段具体报错为:
(failed)
net::ERR_CERT_AUTHORITY_INVALID
只有当我们在浏览器中强制iframe的链接打开后,再次刷新整个页面,iframe里的内容才会被加载。因此才会出现当我们使用过这个iframe后,网站的地址栏会提示不安全的情况。
长
按
关
注
一路同频
公众号 : 大水牛亚洲研究院
一起寻找生命中的光.....