如何在节点的 https 模块中记录 SSL 握手

Meh*_*ran 9 ssl https node.js

我有一个用 node 编写的服务器,它实现了一个安全的双向 SSL 网络服务器:

var https = require('https');
var express = require('express');
var app = express();

var options {
  key: ...,
  cert: ...,
  ca: ...,
  requestCert: true,
  rejectUnauthorized: true
};
https.createServer(options, app).listen(port, host);
Run Code Online (Sandbox Code Playgroud)

但是由于某种未知原因,客户端无法连接。因此,如果我能获得有关连接失败原因的任何日志,那就太好了。

到目前为止,我能得到的所有日志都来自app一个快递对象。但问题是,当连接因证书问题而被拒绝时,它不会到达 express,所以我没有收到错误日志。如何从https服务器获取日志?

Gau*_*nia 10

我也遇到了这个问题,虽然我无法想出一个解决方案来记录https模块中的所有错误,但我能够使用以下方法记录调试信息:

NODE_DEBUG='tls,https' node server.js
Run Code Online (Sandbox Code Playgroud)

这并不理想,因为它不会为您提供确切的错误(例如:Bad SSL Handshake)和相关的回溯,它确实会为您提供类似的信息TLS: onhandshakestart,如果您找不到,它可以让您确定是否存在错误TLS: onhandshakeend日志中对应。


Jam*_*ell 7

配置中有一个名为createServerCalled的选项enableTrace,它会导致 Node 打印大量有关握手的详细信息:

var options {
  key: ...,
  cert: ...,
  ca: ...,
  requestCert: true,
  rejectUnauthorized: true,
  enableTrace: true // Set this :)
};
Run Code Online (Sandbox Code Playgroud)

请参阅文档以获取更多信息。