2013-05-28 3 views
0

Я пытаюсь адаптировать node server included with the angular-seed project для обслуживания SSL. На основании этого example, где они имеют:Включить SSL на сервере тестового узла

// HTTPS 
var https = require('https'); 
// read in the private key and certificate 
var pk = fs.readFileSync('./privatekey.pem'); 
var pc = fs.readFileSync('./certificate.pem'); 
var opts = { key: pk, cert: pc }; 
// create the secure server 
var serv = https.createServer(opts, function(req, res) { 
    console.log(req); 
    res.end(); 
}); 
// listen on port 443 
serv.listen(443, '0.0.0.0'); 

Я попытался следующие, которые, как представляется, работать (никаких ошибок не регистрируются), однако, когда я перейти к https://localhost:8000/home я получаю «Веб-страница не доступна» http://localhost:8000/home - не SSL - работал до того, как я взломал узел сервера. Как я могу заставить это работать как SSL?

#!/usr/bin/env node 

var util = require('util'), 
    http = require('http'), 
    fs = require('fs'), 
    url = require('url'), 
    https = require('https'), 
    events = require('events'); 

// read in the private key and certificate 
var pk = fs.readFileSync('./scripts/privatekey.pem'); 
var pc = fs.readFileSync('./scripts/certificate.pem'); 
var opts = { key: pk, cert: pc }; 

var DEFAULT_PORT = 8000; 

function main(argv) { 
    // create the secure server 
    new HttpServer({ key: pk, cert: pc, 
    'GET': createServlet(StaticServlet), 
    'HEAD': createServlet(StaticServlet) 
    }).start(Number(argv[2]) || DEFAULT_PORT); 
} 
[... balance of script omitted ...] 

ответ

0

код сервера узла определяет

function HttpServer(handlers) { 
    this.handlers = handlers; 
    this.server = http.createServer(this.handleRequest_.bind(this)); 
} 

который затем идет на продлить как, например:

HttpServer.prototype.start = function(port) { 
    this.port = port; 
    this.server.listen(port); 
    util.puts('Http Server running at http://localhost:' + port + '/'); 
}; 

На основе дальнейшего чтения node docs именно это fragement: http.createServer(this.handleRequest_.bind(this)) что должно было бы стать https.createServer(this.handleRequest_.bind(this)) - Я все еще не уверен, где/как передать ключи сертификата в этот процесс.

Учитывая, что эквивалентный экспресс-сервер ssl будет легче определить, я думаю, что я просто переключусь. (После проверки я буду обновляться по мере необходимости.)

var express = require('express'); 
var https = require('https'); 
var http = require('http'); 
var fs = require('fs'); 

// This line is from the Node.js HTTPS documentation. 
var options = { 
    key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'), 
    cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem') 
}; 

// Create a service (the app object is just a callback). 
var app = express(); 
app.use(express.static(__dirname)); 

// Create an HTTP service. 
// http.createServer(app).listen(80); 

// Create an HTTPS service identical to the HTTP service. 
https.createServer(options, app).listen(8000); 
Смежные вопросы