如何让 NodeJS 代理 Jetty Proxy 等客户端证书

How to get NodeJS to proxy Client Certificates like Jetty Proxy

我正在编写一个 NodeJS 代理来替换 Java Jetty Proxy. I am using node-http-proxy。唯一剩下的就是将原始客户端证书传递给代理服务器。

据我了解,Java Servlet 规范要求 Servlet 容器拉取 Client Certificate from an HTTPS request and store that as an attribute on the HttpServletRequest

我不确定在将请求代理到新服务器时 Servlet 容器如何处理属性。我认为它以某种方式将它们附加为 headers 或通过其他方式。

有谁知道这些属性(特别是 javax.servlet.request.X509Certificate)是如何通过代理 HTTPS 请求传递的?第二,我如何使用 NodeJS 实现相同的功能。

在帮助其他人的情况下...问题原来是我使用的节点模块 (node-http-proxy) 没有重用 HTTP 服务器连接证书。也就是说,当尝试与代理服务器建立连接时,它使用的是默认(生成的)证书。

为了正确连接代理服务器,我必须将 ca、pfx 和密码传递给代理连接器。

const ca = ...
const pfx = ...
const passphrase = ...

// proxy connection
server.web(req, res, { ca: ca, pfx: pfx, passphrase: passphrase }, function(err) {}); 

执行此操作后,代理服务器能够提取并验证证书。