Я пытаюсь заставить HTTPS работать над express.js для узла, и я не могу понять это.
Это мой 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 запросы. Обратите внимание, что я не думаю, что toString () для результата fs имеет значение, так как я использовал комбинации обоих и до сих пор нет es bueno.
РЕДАКТИРОВАТЬ ДОБАВИТЬ:
Для производственных систем вам, вероятно, лучше использовать Nginx или HAProxy для прокси-запросов к вашему приложению nodejs. Вы можете настроить nginx для обработки запросов ssl и просто говорить http для вашего узла app.js.
РЕДАКТИРОВАТЬ ДОБАВИТЬ (06.04.2015)
Для систем, использующих AWS, лучше использовать EC2 Elastic Load Balancers для обработки завершения SSL и разрешать регулярный HTTP-трафик на ваши веб-серверы EC2. Для обеспечения дополнительной безопасности настройте свою группу безопасности таким образом, чтобы только ELB мог отправлять HTTP-трафик экземплярам EC2, что предотвратит попадание внешнего незашифрованного HTTP-трафика на ваши компьютеры.
Ответы:
В express.js (начиная с версии 3) вы должны использовать этот синтаксис:
Таким образом, вы предоставляете промежуточное программное обеспечение Express для собственного сервера http / https
Если вы хотите, чтобы ваше приложение работало на портах ниже 1024, вам нужно будет использовать
sudo
команду (не рекомендуется) или использовать обратный прокси-сервер (например, nginx, haproxy).источник
localhost:80
но не работаетhttps://localhost:443
Во-первых, вам нужно создать файлы selfsigned.key и selfsigned.crt . Перейдите к созданию самоподписанного сертификата SSL или выполните следующие действия.
Подойдите к терминалу и выполните следующую команду.
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ./selfsigned.key -out selfsigned.crt
источник
Я столкнулся с аналогичной проблемой при получении SSL для работы на порте, отличном от порта 443. В моем случае у меня был пакетный сертификат, а также сертификат и ключ. Сертификат комплекта представляет собой файл, который содержит несколько сертификатов, узел требует, чтобы эти сертификаты были разбиты на отдельные элементы массива.
В app.js вам нужно указать https и соответственно создать сервер. Также убедитесь, что порт, который вы пытаетесь использовать, на самом деле разрешает входящий трафик.
источник
Включая очки:
Обработка HTTP и WS
Конфигурация SSL
В Sailsjs есть два способа настроить все вещи, во-первых, это настроить в папке конфигурации, у каждого из которых есть свои отдельные файлы (например, соединение с базой данных относительно настроек находится в файле connections.js). И, во-вторых, конфигурация на основе файловой структуры среды, каждый файл среды представлен в
config/env
папке, и каждый файл содержит настройки для конкретной среды.Парус сначала заглядывает в папку config / env, а затем ожидает config / * .js
Теперь давайте настроим ssl в
config/local.js
.Или в production.js
перенаправление http / https & ws / wss
Здесь ws - это Web Socket, а wss - это Secure Web Socket, так как мы настроили ssl, теперь http и ws оба запроса становятся безопасными и преобразуются в https и wss соответственно.
Многие источники из нашего приложения будут получать запросы, как и любые сообщения в блоге, публикации в социальных сетях, но наш сервер работает только по протоколу https, поэтому при поступлении любого запроса с http он выдает ошибку «Этот сайт недоступен» в клиентском браузере. И мы теряем трафик нашего сайта. Поэтому мы должны перенаправить http-запрос на https, те же правила разрешают использование websocket, иначе сокет не будет работать.
Поэтому нам нужно запустить один и тот же сервер на порту 80 (http) и перенаправить все запросы на порт 443 (https). Парус сначала компилирует файл config / bootstrap.js перед тем, как поднять сервер. Здесь мы можем запустить наш экспресс-сервер через порт 80.
В config / bootstrap.js (создать http-сервер и перенаправить весь запрос на https)
источник
Используйте экспресс-блокировку: бесплатный SSL, автоматический HTTPS
Greenlock управляет выдачей и продлением сертификата (через Let's Encrypt) и перенаправлением http => https, из коробки.
express-app.js
:server.js
:Screencast
Посмотрите демонстрацию QuickStart: https://youtu.be/e8vaR4CEZ5s
Для Localhost
Просто отвечаю на это заранее, потому что это общий вопрос для продолжения:
Вы не можете иметь SSL-сертификаты на локальном хосте. Тем не менее, вы можете использовать что-то вроде Telebit, что позволит вам запускать локальные приложения как настоящие.
Вы также можете использовать частные домены с Greenlock через вызовы DNS-01, которые упоминаются в README вместе с различными плагинами, которые его поддерживают.
Нестандартные порты (т.е. нет 80/443)
Прочтите заметку выше о localhost - вы не можете использовать нестандартные порты с Let's Encrypt.
Однако вы можете выставить свои внутренние нестандартные порты как внешние стандартные порты через переадресацию портов, sni-route или использовать что-то вроде Telebit, которое выполняет SNI-маршрутизацию и переадресацию портов / ретрансляцию для вас.
Вы также можете использовать вызовы DNS-01, в этом случае вам вообще не нужно будет открывать порты, и вы также можете защищать домены в частных сетях.
источник
Вот как это работает для меня. Используемое перенаправление также перенаправит все обычные http.
источник
Это мой рабочий код для экспресс 4.0 .
Экспресс 4.0 сильно отличается от 3.0 и других.
4.0 у вас есть файл / bin / www, который вы собираетесь добавить https здесь.
«Запуск npm» - это стандартный способ запуска сервера Express 4.0.
Функция readFileSync () должна использовать __dirname для получения текущего каталога
в то время как require () использует ./ ссылается на текущий каталог.
Сначала вы помещаете файл private.key и public.cert в папку / bin. Это та же папка, что и в файле WWW .
источник