summaryrefslogtreecommitdiff
path: root/lib/_tls_wrap.js
diff options
context:
space:
mode:
authorAlba Mendez <me@alba.sh>2019-05-11 23:07:06 +0200
committerDaniel Bevenius <daniel.bevenius@gmail.com>2019-05-15 05:32:33 +0200
commit53bef423f31bb383212a6754228c21ca3d3231b6 (patch)
tree489bb9e43883e4bdf3dac4bdbb3f2a82e86b2db0 /lib/_tls_wrap.js
parent10d7e01ee9618a42cb658a07d692557a03456fe5 (diff)
downloadandroid-node-v8-53bef423f31bb383212a6754228c21ca3d3231b6.tar.gz
android-node-v8-53bef423f31bb383212a6754228c21ca3d3231b6.tar.bz2
android-node-v8-53bef423f31bb383212a6754228c21ca3d3231b6.zip
tls: expose keylog event on TLSSocket
Exposes SSL_CTX_set_keylog_callback in the form of a `keylog` event that is emitted on clients and servers. This enables easy debugging of TLS connections with i.e. Wireshark, which is a long-requested feature. PR-URL: https://github.com/nodejs/node/pull/27654 Refs: https://github.com/nodejs/node/issues/2363 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Sam Roberts <vieuxtech@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com>
Diffstat (limited to 'lib/_tls_wrap.js')
-rw-r--r--lib/_tls_wrap.js32
1 files changed, 31 insertions, 1 deletions
diff --git a/lib/_tls_wrap.js b/lib/_tls_wrap.js
index a04f0014c7..5b86672b95 100644
--- a/lib/_tls_wrap.js
+++ b/lib/_tls_wrap.js
@@ -286,6 +286,18 @@ function onnewsession(sessionId, session) {
}
+function onkeylogclient(line) {
+ debug('client onkeylog');
+ this[owner_symbol].emit('keylog', line);
+}
+
+function onkeylog(line) {
+ debug('server onkeylog');
+ const owner = this[owner_symbol];
+ if (owner.server)
+ owner.server.emit('keylog', line, owner);
+}
+
function onocspresponse(resp) {
debug('client onocspresponse');
this[owner_symbol].emit('OCSPResponse', resp);
@@ -571,6 +583,7 @@ TLSSocket.prototype._init = function(socket, wrap) {
ssl.onclienthello = loadSession;
ssl.oncertcb = loadSNI;
ssl.onnewsession = onnewsession;
+ ssl.onkeylog = onkeylog;
ssl.lastHandshakeTime = 0;
ssl.handshakes = 0;
@@ -580,6 +593,8 @@ TLSSocket.prototype._init = function(socket, wrap) {
// Also starts the client hello parser as a side effect.
ssl.enableSessionCallbacks();
}
+ if (this.server.listenerCount('keylog') > 0)
+ ssl.enableKeylogCallback();
if (this.server.listenerCount('OCSPRequest') > 0)
ssl.enableCertCb();
}
@@ -605,9 +620,24 @@ TLSSocket.prototype._init = function(socket, wrap) {
ssl.enableSessionCallbacks();
- // Remover this listener since its no longer needed.
+ // Remove this listener since it's no longer needed.
this.removeListener('newListener', newListener);
}
+
+ ssl.onkeylog = onkeylogclient;
+
+ // Only call .onkeylog if there is a keylog listener.
+ this.on('newListener', keylogNewListener);
+
+ function keylogNewListener(event) {
+ if (event !== 'keylog')
+ return;
+
+ ssl.enableKeylogCallback();
+
+ // Remove this listener since it's no longer needed.
+ this.removeListener('newListener', keylogNewListener);
+ }
}
ssl.onerror = onerror;