TLS“拒绝未授权”对我来说意味着什么?

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

我现在的问题是,这到底意味着什么? 我的TLS连接只是一个香草的TCP连接,也可能是一个TLS连接? 把这个写成TLSstream是完全没用的吗?

更重要的是,那台服务器,你知道自签名证书吗? 我的stream在这里和那里实际上encryption?

如文档中所述:

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

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

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

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

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

无论你使用rejectUnauthorized: false还是set ca ,连接都是encryption的。