2012-02-21 7 views
2

ノードjsでリバースプロキシを作成したいが、サイトの特定の部分に対してクライアント証明書を要求できる。Node.js:ディレクトリのクライアント証明書を要求する(再試行を許可する)

  • /secureセクションにはクライアント証明書が必要です。
  • /nosecureセクションにはクライアント証明書は必要ありません。
  • 以前に有効な証明書を提示しなかった場合、ユーザーはクライアント証明書の検証を再試行できます。
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セッションが開始されたときに1回だけ発生します。

これを修正する方法についてのご意見はありますか?

答えて

0

私は自分自身のノブですが、私は同じことをして遊んでいます。

たぶん

if (req.parsedUrl.pathname == '/secure' && !req.connection.getPeerCertificate().valid_to) req.parsedUrl.pathname = '/secureError'; 
のようなもの
関連する問題