Как создать сервер HTTPS в Node.js?

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

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

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 достаточно четко излагает это.

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

Я добавил несколько комментариев и fragment из документации Node.js HTTPS :

 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); 

Нашел этот вопрос во время googling «https узла», но пример в принятом ответе очень старый – взятый из документов текущей (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 и узла это будет работать нормально.

Поскольку 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}); 

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

Snippet:

 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 модулю обрабатывать его, а затем использовать это, чтобы служить вам для подключения / express-приложения.

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

Минимальная настройка для HTTPS-сервера в Node.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 соответственно, выполните следующие действия:

Создайте express-приложение:

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

Приложение, возвращаемое функцией express() является функцией JavaScript. Он может быть передан HTTP-серверам Node в качестве обратного вызова для обработки запросов. Это упрощает предоставление как 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); 

Подробные сведения см. В документе

 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, созданный здесь: 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 можно поместить куда угодно, но путь shoud будет правильным, когда мы дадим в командной строке.
  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.enc.key 1024
  6. Затем он попросит передать фразы: введите от 4 до 11 символов в качестве пароля для сертификата
  7. Затем запустите этот Openssl> req -new -key server.enc.key -out server.csr
  8. Затем он будет запрашивать некоторые данные, такие как название страны кода и т. Д. Заполните его свободно. 10. Затем запустите Openssl> rsa -in server.enc.key -out server.key
  9. Запустите этот OpenSSL> x509 -req -days 365 -in server.csr -signkey server.key -out server.crt, затем используйте предыдущий код, который находится на переполнении стека. Спасибо
  • Ubuntu 10 на виртуальном поле в качестве сервера для хоста Windows 7
  • Как правильно настроить мой веб-сервер в локальной сети?
  • Служба Apache сервера WAMP не запускается в Windows 8
  • Bugzilla, нет логина для просмотра ошибок
  • Как вручную установить Apache, PHP и MySQL в Windows?
  • Как работают DNS-серверы?
  • Могу ли я запустить минималистский веб-сервер на моем маршрутизаторе без перезаписи прошивки с DD-WRT?
  • Обновление сайта с git (over ssh)
  • Ошибка FTP FileZilla «Соединение отказано сервером»
  • Как получить доступ к гостевому серверу из Интернета
  • VM на хосте ESXi - Как сделать доступным извне?
  • Давайте будем гением компьютера.