今天早些时候,我遇到了一个问题,我的客户端是用node
编写的,在连接到的服务器使用自签名证书时出现了问题。因此,我添加了选项rejectUnauthorized: false
来执行tls.connect
命令,就像任何无意识的开发人员一样。
现在我的问题是,这对我意味着什么?我的TLS连接只是一个普通的TCP连接,也可能是一个TLS连接吗?将它写成TLS流是否完全没有用?
更重要的是,那个带有自签名证书的服务器,这里和那里之间的流是否实际上被加密了?
rejectUnauthorized
为true
,则会将服务器证书与提供的CA列表进行验证。如果验证失败,则会触发error
事件;err.code
包含OpenSSL错误代码。默认值为true
。rejectUnauthorized: false
,您表示“我不关心是否可以验证服务器的身份。”显然,这不是一个好的解决方案,因为它会使您易受中间人攻击。ca
值设置为自定义CA。同时,确保您的host
值与服务器自签名证书的通用名称匹配。例如:var socket = tls.connect({
host: 'MyTLSServer',
port: 1337,
ca: [ fs.readFileSync('CA.pem') ],
}, function() {
// Connected!
});
// ...
无论您使用 rejectUnauthorized: false
还是设置 ca
,连接都是加密的。