所以,我今天早些时候遇到了一个问题,我的客户端用node
编写,因为我连接的服务器使用的是自签名证书。所以,我去了我的rejectUnauthorized: false
命令添加选项tls.connect
,就像任何不知情的开发人员一样。
现在我的问题是,这对我来说意味着什么?我的TLS连接是否只是一个可能是TLS连接的vanilla TCP连接?写这个作为TLS流完全没用吗?
更重要的是,该服务器,您知道具有自签名证书的服务器吗?我的流在这里和那里之间是否实际加密了?
答案 0 :(得分:28)
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
,都会加密连接。