2

Node.js サーバー (Expressjs フレームワーク) に HTTPS を実装しようとしています。署名済みの証明書とキー、およびテスト/開発用の自己署名証明書/キーがあります。

if(process.env.NODE_ENV == 'production'){
  var app = module.exports = express.createServer({
    key: fs.readFileSync('./ssl/nopass_server.key'),
    cert: fs.readFileSync('./ssl/server.crt')
  });
} else {
  var app = module.exports = express.createServer({
    key: fs.readFileSync('./ssl/self_signed/nopass_server.key'),
    cert: fs.readFileSync('./ssl/self_signed/server.crt')
  });
}

また、Heroku で SSL エンドポイントをセットアップしました。ですべてlocalhost正常に動作し、エンドポイントも正常に動作しているように見えますが、実稼働環境 (Heroku) でアプリを実行すると、H13 アプリケーション エラーが発生します。興味深いことに (またはそうではありません)、代わりに HTTP サーバーを作成するよう Express に指示すると、var app = module.exports = express.createServer()動作しますが、Chrome はthe page at https://mydomain.com ran insecure content from http://mydomain.com.

本番用に Express で HTTPS サーバーを作成できない/作成すべきではないですか? 必要であれば、Heroku で動作させるために必要なものはありますか (たとえば、Heroku で正しいポートを設定することを信頼していますvar port = process.env.PORT)? そうでない場合、ブラウザが文句を言わないように https サーバーを実行していない場合、どうすれば「安全な」コンテンツを提供できますか?

以下を使用して、https 以外のリクエストを処理しています。

app.get('*',function(req,res,next){
  if(req.headers['x-forwarded-proto'] != 'https'){
    res.redirect('https://mydomain.com'+req.url);
  } else next();
});

これは現在、残りのルートのすぐ上にありますが、これが問題になる可能性がありますか?

私は一般的にhttpsの経験が非常に限られているため、おそらく明らかなものが欠けています。

4

2 に答える 2

8

SSL ターミネーションは Heroku のロード バランサーで発生します。アプリにプレーンな (非 SSL) トラフィックを送信するため、アプリは非 HTTPS サーバーを作成する必要があります。に関してはthe page at https://mydomain.com ran insecure content from http://mydomain.com、すべての画像/スクリプト/etc. あなたのページが使用しているhttpsプロトコルも提供されます。

于 2012-07-14T22:50:07.897 に答える