Как создать сервер HTTPS в узле.Джей?



учитывая ключ SSL и сертификат, как создать службу HTTPS?

665   9  

9 ответов:

Я нашел следующий пример.

https://web.archive.org/web/20120203022122/http://www.silassewell.com/blog/2010/06/03/node-js-https-ssl-server-example/

Этот узел работает на версии v0.1.94 - версии v0.3.1. server.setSecure() удаляется в более новых версиях узла.

непосредственно из этого источника:

const crypto = require('crypto'),
  fs = require("fs"),
  http = require("http");

var privateKey = fs.readFileSync('privatekey.pem').toString();
var certificate = fs.readFileSync('certificate.pem').toString();

var credentials = crypto.createCredentials({key: privateKey, cert: certificate});

var handler = function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
};

var server = http.createServer();
server.setSecure(credentials);
server.addListener("request", handler);
server.listen(8000);

на Express API doc излагает это довольно ясно.

дополнительно ответ дает шаги для создания самозаверяющего сертификата.

Я добавил некоторые комментарии и фрагмент узел.JS HTTPS documentation:

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.cert')
};

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

// Create an HTTP service.
http.createServer(app).listen(80);
// Create an HTTPS service identical to the HTTP service.
https.createServer(options, app).listen(443);

нашел этот вопрос, когда гуглил "узел https", но пример в принято отвечать очень старый-взят из docs текущей (v0.10) версии узла, он должен выглядеть так:

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

var options = {
  key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
  cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem')
};

https.createServer(options, function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}).listen(8000);

приведенные выше ответы хороши, но с Express и node это будет работать нормально.

поскольку express создает приложение для вас, я пропущу это здесь.

var express = require('express')
  , fs = require('fs')
  , routes = require('./routes');

var privateKey = fs.readFileSync('cert/key.pem').toString();
var certificate = fs.readFileSync('cert/certificate.pem').toString();  

// To enable HTTPS
var app = module.exports = express.createServer({key: privateKey, cert: certificate});

Я заметил, что ни один из этих ответов показывают, что добавление промежуточный корень CA цепи, вот некоторые примеры нулевой конфигурации играть, чтобы увидеть что:

фрагмент:

var options = {
  key: fs.readFileSync(path.join('certs', 'my-server.key.pem'))
, ca: [ fs.readFileSync(path.join('certs', 'my-root-ca.crt.pem'))]
, cert: fs.readFileSync(path.join('certs', 'my-server.crt.pem'))
, requestCert: false
, rejectUnauthorized: false
};

var server = https.createServer(options);
var app = require('./my-express-or-connect-app').create(server);
server.on('request', app);
server.listen(443, function () {
  console.log("Listening on " + server.address().address + ":" + server.address().port);
});

var insecureServer = http.createServer();
server.listen(80, function () {
  console.log("Listening on " + server.address().address + ":" + server.address().port);
});

этот это одна из тех вещей, которые часто проще, если вы не попробуйте сделать это напрямую через connect или express, но пусть родной https модуль обрабатывать его, а затем использовать, чтобы служить вам connect / express приложение.

также, если вы используете server.on('request', app) вместо передачи приложение при создании сервера, это дает вам возможность передать server экземпляр для некоторой функции инициализатора, которая создает приложение connect / express (если вы хотите сделать websockets через ssl на том же сервере, например).

минимальная настройка для HTTPS-сервера в узле.js будет что-то вроде этого :

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

var httpsOptions = {
    key: fs.readFileSync('path/to/server-key.pem'),
    cert: fs.readFileSync('path/to/server-crt.pem')
};

var app = function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}

https.createServer(httpsOptions, app).listen(4433);

Если вы также хотите поддерживать http-запросы, вам нужно сделать только эту небольшую модификацию:

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

var httpsOptions = {
    key: fs.readFileSync('path/to/server-key.pem'),
    cert: fs.readFileSync('path/to/server-crt.pem')
};

var app = function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}

http.createServer(app).listen(8888);
https.createServer(httpsOptions, app).listen(4433);

чтобы ваше приложение, чтобы слушать как http и https порты 80 и 443 соответственно, сделайте следующее

создать экспресс-приложение:

var express = require('express');
var app = express();

приложение, возвращенные express() - это функция JavaScript. Он может быть передан на HTTP-серверы узла в качестве обратного вызова для обработки запросов. Это позволяет легко предоставлять как HTTP, так и HTTPS-версии вашего приложения, используя одну и ту же базу кода.

вы можете сделать так, как следует:

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

var options = {
  key: fs.readFileSync('/path/to/key.pem'),
  cert: fs.readFileSync('/path/to/cert.pem')
};

http.createServer(app).listen(80);
https.createServer(options, app).listen(443);

для полной детализации см. doc

var path = require('path');
var express = require('express');

var app = express();

var staticPath = path.join(__dirname, '/public');
app.use(express.static(staticPath));

app.listen(8070, function() {
  console.log('Server started at port 8070');
});
  1. скачать rar файл для openssl set up отсюда:https://indy.fulgan.com/SSL/openssl-0.9.8r-i386-win32-rev2.zip
  2. просто скопируйте папку на диске C.
  3. создать openssl.cnf файл и загрузить их содержимое из : http://web.mit.edu/crypto/openssl.cnf openssl.cnf можно поместить в любое место, но путь должен быть правильным, когда мы даем в командной строке.
  4. открыть команду propmt и установить openssl.путь cnf C:\set OPENSSL_CONF=d: / openssl.cnf 5.Запустите это в cmd : C:\openssl-0.9.8r-i386-win32-rev2>openssl.exe
  5. затем запустите OpenSSL> genrsa-des3-out server.прил.ключевые 1024
  6. затем он попросит пароль фразы: введите 4 до 11 символов в качестве пароля для сертификата
  7. затем запустите этот Openssl>req-new-key server.прил.сервер выдачи ключей.КСО
  8. затем он запросит некоторые детали, такие как название страны и т. д. заполните его свободно. 10 . Затем запустите Openssl > rsa-in сервер.прил.сервер выдачи ключей.ключ
  9. запустите этот сервер OpenSSL> x509-req-days 365-in.csr-сервер signkey.сервер выдачи ключей.затем crt использует предыдущий код, который находится на переполнении стека Спасибо

Comments

    Ничего не найдено.