V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
7DLNU56W
V2EX  ›  JavaScript

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

  •  
  •   7DLNU56W · 2018-07-14 16:01:35 +08:00 · 7838 次点击
    这是一个创建于 2327 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    12 条回复    2018-07-17 13:04:17 +08:00
    miao1007
        2
    miao1007  
       2018-07-14 17:07:11 +08:00 via Android
    js 可以中间人攻击啊
    noe132
        3
    noe132  
       2018-07-14 17:25:27 +08:00   ❤️ 4
    其实,就算 JS 能读你的证书信息,你读证书信息的 JS 代码本身也是可以被篡改的
    于是你需要一个保证读证书 JS 信息代码不被篡改的代码,然而 保证读证书 JS 信息代码不被篡改的代码 也是有可能被篡改的
    于是无限循环,因为本身获取的 JS 就不可靠了,既然 JS 不可靠了那么一切都不可信任。

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

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

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

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

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

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

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

    去广告有人维护规则 http://koolshare.cn/thread-64086-1-1.html
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3154 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 13:31 · PVG 21:31 · LAX 05:31 · JFK 08:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.