如何validation连接实际上是TLS安全的?

我在Node.js中创build了一个TLS服务器和一个合适的TLS客户端。 显然他们都是一起工作,但我想validation一下。

基本上,我想到的东西,如检查连接,或手动连接到服务器,并检查它发送什么,或类似的东西…

服务器的相关代码是:

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); 

我怎么能这样做?

Wireshark会告诉你数据是否是TLSencryption的,但是它不会告诉你这个连接是否真的能够抵御中间人攻击。 为此,您需要testing您的客户端是否拒绝连接到提供未经可信CA签名的证书的服务器,仅适用于其他主机名的证书,无效的证书,已撤销的证书,…

如果你的server.pem不是来自真实/可信CA的证书,而你的客户端也不拒绝连接到服务器(并且你没有明确地向客户端提供server.pem),那么你的客户端很可能不安全的。 鉴于你连接到一个IP而不是一个主机名,没有信任的CA应该为它颁发一个证书,所以我假设你使用一个自签名的并且是脆弱的。 connect()时可能需要指定rejectUnauthorized 。 (Rant:这是一个非常常见的错误,我认为没有validation是默认的,这是非常不负责任的。)

基本上,我想到的东西,如检查连接,或手动连接到服务器,并检查它发送什么,或类似的东西…

您可以使用Wireshark等工具来查看它们正在传输的数据。