JavaScript 能否读取网页的数字证书信息?

2018-07-14 16:01:35 +08:00
 7DLNU56W

JS 能否读取网页的数字证书信息(如证书颁发者,有效期,序列号,指纹等),用哪个命令读取呢?

主要是想利用这种方式防止证书被替换的问题,有一些 CA (不被浏览器或操作系统默认信任的)的根证书通过某种手段添加到了某台计算机信任列表中,然后他就会乱签发证书导致服务器与客户端传输的数据面临被窃听或篡改的风险,想通过在客户端 JS 读取出证书的相关内容与真实证书的相关内容做比较,当存在问题时,弹出相关信息来提示用户。

请问下 JS 是否支持这类功能?

7665 次点击
所在节点    JavaScript
12 条回复
nihiue
2018-07-14 16:05:53 +08:00
miao1007
2018-07-14 17:07:11 +08:00
js 可以中间人攻击啊
noe132
2018-07-14 17:25:27 +08:00
其实,就算 JS 能读你的证书信息,你读证书信息的 JS 代码本身也是可以被篡改的
于是你需要一个保证读证书 JS 信息代码不被篡改的代码,然而 保证读证书 JS 信息代码不被篡改的代码 也是有可能被篡改的
于是无限循环,因为本身获取的 JS 就不可靠了,既然 JS 不可靠了那么一切都不可信任。

怎么办?只有一个办法,让证书颁发机构做信用背书,这就是 CA 证书体系。
通常修改 CA 都需要管理员权限。
如果 CA 都出问题了,那说明在线服务都不可靠了,只有靠线下交流才能保证信息不被篡改

不过,乱添加证书这个问题,从这个角度来看,没法解决,只有说做难以逆向的客户端程序把自己证书硬编码进去,能够一定程度上解决你说的这种问题

所以我的建议是,不要操心这个问题,用 https 就行了
caola
2018-07-14 19:54:24 +08:00
你只是想判断 ca 有没有被更改,那么 HPKP 是可以防止这个问题,但是 HPKP 已经被 chrome 废掉了
7DLNU56W
2018-07-14 20:40:11 +08:00
@noe132 了解您的意思了,但大部分的劫持都是针对全部页面的,很少有专门针对某一网站的,所以 JS 被篡改的概率相对小一点(中间人可能想不到某个网站的页面 js 中会有提醒证书问题的代码,或者不值得去为个别网站做)。所以还是有一点可能让攻击者暴露的。

PS:可能是个人兴趣原因,我有个小习惯,偶尔会翻一下各个网站的证书,前几日在朋友那里发现所有网站的证书都被替换了,变成由 Certum Trusted NetWord CA 2 颁发的了,而且没有中间证书,这个根证书之间颁发了网站的证书。然后我在受信任的根证书颁发列表中找到了这个证书,并发现了很多奇奇怪怪的,没怎么见过的被信任的根证书。然后我就想到了这个问题。
7DLNU56W
2018-07-14 22:11:39 +08:00
@caola HPKP 本来支持的浏览器就不是很多,现在谷歌放弃了这个,就更没有支持的了,基本没啥用处。不过,现在推行的是 CAA,CA/B 论坛也是强制要求 CA 检查域名的 CAA 记录,但这仍然避免不了一些本就不受信任的证书私自加入操作系统 /浏览器信任列表的问题。
lzvezr
2018-07-15 06:59:30 +08:00
关键是有人需要故意被中间人攻击,比如某些去广告程序
现在有的 app 自带 sslpinning 我都觉得好烦
7DLNU56W
2018-07-15 23:53:44 +08:00
@lzvezr 作为网站的制作与维护者,不希望客户收到的信息与服务器传出的信息有区别。一旦遇到这种情况发生,由于用户对各种技术本身了解不多,一般会认为收到的信息就是有服务器发送的,一旦其中出现问题,首先会认为是网站所有者的问题,所以避免中间人劫持即使对用户的保护也是对自己的保护。
所以需要通过一定策略阻止或对此种情况提出警告。

另外,某些去广告的程序用的是什么算法,是如何识别哪里是广告,又是如何去广告的呢?
lzvezr
2018-07-16 08:30:30 +08:00
@7DLNU56W 这点确实没错,有时候看到有人问为啥网页打不开,证书不正确,底下有人说可以忽略的我都想沿着网线砍他。目前浏览器能解决的方法大概只有 caa 了,不过国内一大票公共 DNS 不支持,可以说基本没有

去广告很简单,中间人攻击,修改网页元素或者屏蔽脚本加载,和浏览器扩展差不多,直接套用 adblock 规则就行
7DLNU56W
2018-07-16 10:00:29 +08:00
@lzvezr CAA 也无法解决我说的此类问题,因为规范的默认遵守 CAA 协议的都默认在信任列表中了,而那些不被默认信任的根本不会去检查 CAA 记录。还是 HPKP 比较强硬,也最为有效,但确实容易造成一些问题,停止支持了也可以理解。

去广告问题,不过也没中有那么多的 script 或 img 或其他标签,怎么才能区分到底哪一个是广告呢,是通过哪些特征区分的么?
7DLNU56W
2018-07-16 10:03:33 +08:00
@lzvezr 那些遵守 CAA 的都不会乱发证书的,乱发证书的从来不看 CAA 记录。
lzvezr
2018-07-17 13:04:17 +08:00
@7DLNU56W 你一说才提醒我 caa 是个 ca 需要遵循的标准,恶意 ca 才不会管这些。

去广告有人维护规则 http://koolshare.cn/thread-64086-1-1.html

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/470887

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX