ノードのexpress.jsでHTTPSを機能させようとしているのですが、理解できません。
これは私のapp.js
コードです。
var express = require('express');
var fs = require('fs');
var privateKey = fs.readFileSync('sslcert/server.key');
var certificate = fs.readFileSync('sslcert/server.crt');
var credentials = {key: privateKey, cert: certificate};
var app = express.createServer(credentials);
app.get('/', function(req,res) {
res.send('hello');
});
app.listen(8000);
実行すると、HTTPリクエストにのみ応答するようです。
私は単純なバニラnode.js
ベースのHTTPSアプリを書きました:
var fs = require("fs"),
http = require("https");
var privateKey = fs.readFileSync('sslcert/server.key').toString();
var certificate = fs.readFileSync('sslcert/server.crt').toString();
var credentials = {key: privateKey, cert: certificate};
var server = http.createServer(credentials,function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
});
server.listen(8000);
私はこのアプリを実行すると、それはない HTTPSリクエストに応答します。fsの結果のtoString()は重要ではないことに注意してください。両方の組み合わせを使用していて、それでもes buenoは使用していません。
追加する編集:
本番システムでは、おそらくNginxまたはHAProxyを使用して、nodejsアプリへのリクエストをプロキシする方がよいでしょう。nginxを設定してsslリクエストを処理し、ノードのapp.jsにhttpを話すだけです。
追加して編集(2015年4月6日)
AWSを使用しているシステムでは、EC2 Elastic Load Balancerを使用してSSL終了を処理し、EC2 Webサーバーへの通常のHTTPトラフィックを許可する方がよいでしょう。セキュリティをさらに強化するには、ELBのみがHTTPトラフィックをEC2インスタンスに送信できるようにセキュリティグループを設定します。これにより、外部の暗号化されていないHTTPトラフィックがマシンに到達するのを防ぎます。