Node.js:需要一个目录的客户端证书(并允许重试)

我想在节点js中创build一个反向代理,在那里我可以要求客户端证书的某些部分的网站。

  • /安全部分应该要求客户端证书。
  • / nosecure部分不需要客户端证书。
  • 如果用户之前没有提供有效的证书,用户应该能够重新进行客户端证书validation。
var options = { key: fs.readFileSync(__dirname + '/key.pem'), cert: fs.readFileSync(__dirname + '/cert.pem'), ca: fs.readFileSync(__dirname + '/clientCA.pem'), requestCert: true }; https.createServer(options, function (req, res) { //parse url req.parsedUrl = url.parse(req.url); //handle urls switch(req.parsedUrl.pathname) { case '/nosecure': /* * This location does not require a client cert */ res.end('nosecure'); break; case '/secure': /* * This location requires a client certificate, which can be checked by getPeerCertificate() * If no certificate is provided, the user will be redirected to secureError */ res.end('secure'); break; case '/secureError': /* * This location does not require a client cert * It displays the error page, in case the client cert was not provided/validated on /secure. */ res.end('Certificate validation failed. <a href="/secure">Try again</a>'); break; default: res.end('not found'); break; } }).listen(9000); 

通常情况下,您只能在服务器级别设置这些要求。 但是我可以在安全部分手动检查证书。

但问题依然存在。 我不能要求客户端浏览器再次向我发送证书。 SSL会话启动时只发生一次。

有想法该怎么解决这个吗?

我自己是一个noob,但我正在玩同样的事情。

也许类似

 if (req.parsedUrl.pathname == '/secure' && !req.connection.getPeerCertificate().valid_to) req.parsedUrl.pathname = '/secureError';