当我在浏览器中访问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有关吗?
答案 0 :(得分:1)
这可能是因为您的浏览器支持Server Name Indication(SNI)和Node.js(或者更确切地说,您正在使用的客户端模块)不支持。由于证书协商发生在HTTP开始之前,因此需要SNI才能从单个IP地址提供多个主机名。