TLS究竟是什么'拒绝绝育'对我来说意味着什么?

时间:2015-08-06 16:28:52

标签: node.js ssl

所以,我今天早些时候遇到了一个问题,我的客户端用node编写,因为我连接的服务器使用的是自签名证书。所以,我去了我的rejectUnauthorized: false命令添加选项tls.connect,就像任何不知情的开发人员一样。

现在我的问题是,这对我来说意味着什么?我的TLS连接是否只是一个可能是TLS连接的vanilla TCP连接?写这个作为TLS流完全没用吗?

更重要的是,该服务器,您知道具有自签名证书的服务器吗?我的流在这里和那里之间是否实际加密了?

1 个答案:

答案 0 :(得分:28)

documentation

中所述
  • rejectUnauthorized:如果true,则根据提供的CA列表验证服务器证书。如果验证失败,则会发出error事件; err.code包含OpenSSL错误代码。默认值:true

由于您使用的是自签名证书,显然不会与内置CA匹配,因此默认情况下连接会被拒绝,因为它无法验证服务器是否是他们所说的人。 / p>

通过设置rejectUnauthorized: false,您说“我不在乎我是否无法验证服务器的身份。”显然这不是一个好的解决方案,因为它让你容易受到MITM攻击。

自签名证书的更好解决方案是在连接客户端时为您的自定义CA设置适当的ca值。另外,请确保您的host值与服务器的自签名证书的公用名相匹配。例如:

var socket = tls.connect({
  host: 'MyTLSServer',
  port: 1337,
  ca: [ fs.readFileSync('CA.pem') ],
}, function() {
  // Connected!
});

// ...

无论您使用rejectUnauthorized: false还是设置ca,都会加密连接。