代码之家  ›  专栏  ›  技术社区  ›  Tim Perry

如果客户端拒绝我的TLS证书,则在服务器端检测

  •  1
  • Tim Perry  · 技术社区  · 8 年前

    我正在Node.js中构建一个HTTP代理,它试图使用自签名证书拦截HTTPS连接。我用的是裸体的 http.Server ,实例化我自己的 tls.TLSSocket 根据需要升级sockets,并且当客户机信任CA时,这些功能都能很好地工作。

    如果客户端没有配置CA,它显然会拒绝连接,抱怨链中有一个自签名证书。

    这是应该的,但我希望有一种方法可以从服务器端检测到这种情况,这样我就可以提示用户正确配置他们的客户端。

    有可能这样做吗?看来TLS RFC( https://tools.ietf.org/html/rfc5246#section-7.2.2 )有很多关于证书拒绝的错误警报消息,我希望包括这些消息,但是我在节点中看不到任何调试信息,即使使用 NODE_DEBUG=tls .

    我真的很想订阅TLS错误警报事件,这样我就可以直接对其中各种有趣的情况做出反应。我该怎么做?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Steffen Ullrich    8 年前

    通常你看到的是客户端关闭了连接。有些客户端可能会发送警报,而另一些则不会-具体行为取决于TLS堆栈。无论如何,您无论如何都不能从这个死连接中重定向客户端。

    您可以尝试使用纯HTTP提供一些初始页,其中您可以使用与CA签名的证书从HTTPS资源中包含一些图像或类似内容。使用某些脚本,您可以检测客户端是否成功加载了该图像,在后一种情况下,您可以显示有关需要安装某些图像或类似内容的信息证书。