ottomao / node-easy-cert

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

MAC Chrome 56.0.2924.87 (64-bit) 下 证书验证失败

fwon opened this issue · comments

Line 44~47, 84 ~87 证书的扩展为何要注释掉?

背景:在使用Anyproxy的时候浏览器中CA证书验证出错。最终定位问题到该模块
解决:参考node-forge 生成x.509证书的代码,发现扩展是要设置的。去掉注释后浏览器HTTPS请求成功通过CA认证。

请问这里为何要注释掉这几行扩展?虽然去掉就能成功通过验证,但还是不大清楚其具体作用。

没什么原因,只是为了保持证书简洁,删掉些没用的东西...

我们复现下吧,如果确实是必要的字段,会给加回去。

我这里用Mac Chrome 57.x ,签发的证书没啥问题啊,只要安装了CA,浏览器就能信任。

你那儿报错的截图提供下?dev tool的security tab里有。

image

image

下面是通过anyproxy --root安装证书并安装信任(系统已信任);
anyproxy --intercept 启动服务器,结果浏览器显示报错
image
image
感觉和你上面的证书没什么区别

上面有一点我说错了,我不单单取消注释的代码,在生成域名子证书的方法generateCertsForHostname中,做了一些修改

cert.setExtensions([
    { name: 'basicConstraints', cA: false },
    { name: 'subjectAltName', altNames: [{ type: 2, value: domain }] },
    { name: 'keyUsage', keyCertSign: false, digitalSignature: true, nonRepudiation: false, keyEncipherment: true, dataEncipherment: true },
    { name: 'extKeyUsage', serverAuth: true, clientAuth: true, codeSigning: false, emailProtection: false, timeStamping: false },
    { name: 'nsCertType', client: true, server: true, email: false, objsign: false, sslCA: false, emailCA: false, objCA: false },
    { name: 'subjectKeyIdentifier' }
  ]);

将某些字段设置为false, 重新安装证书,就能通过浏览器认证了,这应该是关闭了一些证书约束。但在你机器上可认证就不晓得是什么原因。
image

commented

@fwon 感谢,测试好久原来是这么回事