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

Bre*_*dly 20 ssl node.js

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

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

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

msc*_*dex 35

文档中所述:

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

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

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

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

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

// ...
Run Code Online (Sandbox Code Playgroud)

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

  • 节点抛出错误:“链中自签名证书”。有没有更好的方法来解决自签名问题?主机/CN 可以是 IP 地址吗? (3认同)