向node.js提供的不同证书与浏览器相对应

时间:2014-03-07 06:03:27

标签: node.js ssl https

当我在浏览器中访问https://gmail.com时,我发送了301重定向到https://mail.google.com。当我尝试使用node.js做同样的事情时,我得到一个“主机名/ IP与证书的altnames不匹配”错误。

这是有道理的,因为gmail.com提供给node.js的证书不包括“gmail.com”作为公共名称,也不包括alt-name。这是gmail.com提供的证书......

{ subject: 
   { C: 'US',
     ST: 'California',
     L: 'Mountain View',
     O: 'Google Inc',
     CN: 'mail.google.com' },
  issuer: { C: 'US', O: 'Google Inc', CN: 'Google Internet Authority G2' },
  subjectaltname: 'DNS:mail.google.com',
  exponent: '10001',
  valid_from: 'Feb 25 15:21:00 2014 GMT',
  valid_to: 'May 26 00:00:00 2014 GMT'}

当我检查服务器应该呈现的证书时,我看到http://www.sslshopper.com/ssl-checker.html#hostname=gmail.com包括gmail.com扩展名。我认为这是浏览器收到的内容。

为什么节点会向浏览器发送不同的证书? 这可能与CNAME和DNS有关吗?

1 个答案:

答案 0 :(得分:1)

这可能是因为您的浏览器支持Server Name Indication(SNI)和Node.js(或者更确切地说,您正在使用的客户端模块)不支持。由于证书协商发生在HTTP开始之前,因此需要SNI才能从单个IP地址提供多个主机名。