我在Node.js中创建了一个TLS服务器和一个合适的TLS客户端。显然他们都互相合作,但我想验证它。
基本上,我想到的一些事情,比如检查连接,或者手动连接到服务器并检查它发送的内容,或类似的东西......
服务器的相关代码是:
var tlsOptions = {
key: fs.readFileSync('key.pem'),
cert: fs.readFileSync('server.pem')
};
tls.createServer(tlsOptions, function (tlsConnection) {
var d = dnode({
// [...]
});
tlsConnection.pipe(d).pipe(tlsConnection);
}).listen(3000);
相应的客户端代码是:
var d = dnode();
d.on('remote', function (remote) {
// [...]
});
var tlsConnection = tls.connect({
host: '192.168.178.31',
port: 3000
});
tlsConnection.pipe(d).pipe(tlsConnection);
我怎么能这样做?
答案 0 :(得分:3)
Wireshark会告诉您数据是否经过TLS加密,但它不会告诉您连接是否真的可以抵御中间人攻击。为此,您需要测试您的客户端是否拒绝连接到提供未由受信任CA签名的证书的服务器,仅对其他主机名有效的证书,不再有效的证书,已撤销的证书,...
如果您的server.pem不是来自真实/可信CA的证书,并且您的客户端不拒绝连接到服务器(并且您没有明确地向客户端提供server.pem),那么您的客户端很可能是不安全的。鉴于您要连接到IP而不是主机名,没有受信任的CA应该为其颁发证书,因此我假设您使用自签名证书并且易受攻击。您可能需要在rejectUnauthorized
时指定connect()
。 (Rant:由于这是一个非常常见的错误,我认为将默认验证作为默认是非常不负责任的。)
答案 1 :(得分:0)
基本上,我想到的一些事情,比如检查连接,或者手动连接到服务器并检查它发送的内容,或类似的东西......
您可以使用Wireshark等工具查看他们正在传输的数据。