Смотрите официальный экспресс-ответ ниже @Jacob Marble.
clayzermk1
21
Этот образец больше не работает, так как реализация HTTPS была заново выполнена в Node.JS 0.4. Смотрите соответствующие документы на nodejs.org. stackoverflow.com/questions/5136353/…
scottyab
11
Этот ответ очень старый и больше не работает. Пожалуйста, посмотрите ответ pkyeck ниже или перейдите по адресу
Джей Шет,
2
Также ссылка не работает
TlonXP
484
В документе Express API это объясняется довольно четко.
Кроме того, в этом ответе приведены шаги по созданию самозаверяющего сертификата.
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);
Хорошо, как раз собирался опубликовать это сам. Спасибо. Кроме того, я нашел эту статью полезной для создания самозаверяющего сертификата.
clayzermk1
1
Убедитесь, что вы вставили optionsсначала https.createServer, чтобы избежать загадочных ошибок.
Wberry
1
Я настраиваю почти идентичный порт сервера https 8888 и не знаю, как изменить маршруты. когда я запускаю curl curl --insecure localhost: 8888 curl: (35) Неизвестная ошибка протокола SSL при подключении к localhost: 8888 с чем связана ошибка и как ее обойти. Когда я набираю localhost: 8888 в браузере, он зависает и https: / localhost: 8888 выдает ошибку SSL
reza
2
@Costa вы можете перенаправлять пользователей с http на https с помощью express-force-ssl или рукописного промежуточного программного обеспечения - это довольно просто
floatdrop
1
@NathanMcKaskle Вы можете отключить пароль: проверьте это руководство, но если вы используете macOS, убедитесь, что длина сгенерированного ключа составляет не менее 2048:openssl genrsa -out key.pem 2048
sakisk
87
Нашел этот вопрос, когда гуглил "узел https", но пример в принятом ответе очень старый - взят из документов текущей (v0.10) версии узла, он должен выглядеть следующим образом:
Работал как шарм. Эта информация очень пригодилась, когда я запустил инструмент node.js (PDFJS) поверх приложения PHP, которое недавно было вынуждено запускать через https. Программа iframe была очень недовольна тем, что загружала мое приложение node.js на альтернативный порт, отличный от https.
lewsid
2
Это выглядит хорошо, но как я могу создать файлы, которые вам нужны ( *.pem)? Я пытался перейти на эту страницу , но при открытии localhost:8000в браузере данные не были получены (просто загрузка ...).
Ионика Бизэ
7
@ IonicăBizau, для генерации ключей установите openssl, затем в командной строке cmd введитеopenssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 3001
mido
2
@ IonicăBizeve, вам нужно напрямую перейти к https://localhost:8080. HTTP не является HTTPS.
Флориан Вендельборн
Можно ли создать https-сервер с папкой? Таким образом, вы можете поместить в него файл и получить к нему доступ, например, localhost: 81 / main.js
FrenkyB
47
Приведенные выше ответы хороши, но с Express и node это будет работать нормально.
Поскольку Express создаст приложение для вас, я пропущу это здесь.
Я заметил, что ни один из этих ответов не показывает, что добавление промежуточного корневого CA в цепочку, вот несколько примеров с нулевой конфигурацией, с которыми можно поиграть:
var options ={// this is the private key only
key: fs.readFileSync(path.join('certs','my-server.key.pem'))// this must be the fullchain (cert + intermediates), cert: fs.readFileSync(path.join('certs','my-server.crt.pem'))// this stuff is generally only for peer certificates//, ca: [ fs.readFileSync(path.join('certs', 'my-root-ca.crt.pem'))]//, requestCert: 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 на том же сервере, для пример).
Это хорошее объяснение, но предоставленная ссылка в разделе обновлений не работает (выдает ошибку 500)
Чаки
8
Чтобы включить приложение для прослушивания как httpи httpsна порты 80и , 443соответственно, выполните следующие действия
Создать экспресс-приложение:
var express = require('express');var app = express();
Возвращаемое приложение express()является функцией JavaScript. Он может быть передан на HTTP-серверы Node как обратный вызов для обработки запросов. Это позволяет легко предоставлять как HTTP, так и HTTPS версии вашего приложения, используя одну и ту же кодовую базу.
Создайте файл openssl.cnf и загрузите его содержимое с: http://web.mit.edu/crypto/openssl.cnf
Openssl.cnf можно поместить в любое место, но путь будет правильным, если мы дадим в командной строке.
Откройте команду propmt и задайте путь openssl.cnf C: \ set OPENSSL_CONF = d: /openssl.cnf 5. Запустите его в cmd: C: \ openssl-0.9.8r-i386-win32-rev2> openssl.exe
Затем запустите OpenSSL> genrsa -des3 -out server.enc.key 1024
Затем он попросит ввести пароль: введите от 4 до 11 символов в качестве пароля для сертификата.
Затем запустите этот Openssl> req -new -key server.enc.key -out server.csr
Затем он запросит некоторые детали, такие как название страны, код страны и т. Д., Заполните ее свободно. 10 Затем запустите Openssl> rsa -in server.enc.key -out server.key
Запустите этот OpenSSL> x509 -req -days 365 -in server.csr -signkey server.key -out server.crt, а затем используйте предыдущий код, переполняющий стек Спасибо
Ответы:
Я нашел следующий пример.
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()
удаляется в более новых версиях узла.Непосредственно из этого источника:
источник
setSecure
устарел. Проверьте это вместо этого stackoverflow.com/questions/5136353/node-js-https-secure-errorВ документе Express API это объясняется довольно четко.
Кроме того, в этом ответе приведены шаги по созданию самозаверяющего сертификата.
Я добавил несколько комментариев и фрагмент из документации по HTTPS для Node.js :
источник
options
сначалаhttps.createServer
, чтобы избежать загадочных ошибок.openssl genrsa -out key.pem 2048
Нашел этот вопрос, когда гуглил "узел https", но пример в принятом ответе очень старый - взят из документов текущей (v0.10) версии узла, он должен выглядеть следующим образом:
источник
*.pem
)? Я пытался перейти на эту страницу , но при открытииlocalhost:8000
в браузере данные не были получены (просто загрузка ...).openssl
, затем в командной строке cmd введитеopenssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 3001
https://localhost:8080
. HTTP не является HTTPS.Приведенные выше ответы хороши, но с Express и node это будет работать нормально.
Поскольку Express создаст приложение для вас, я пропущу это здесь.
источник
module.exports
? В этом нет необходимостиМинимальная настройка HTTPS-сервера в Node.js будет выглядеть примерно так:
Если вы также хотите поддерживать http-запросы, вам нужно сделать только эту небольшую модификацию:
источник
Обновить
Используйте Let's Encrypt через Greenlock.js
Оригинальный пост
Я заметил, что ни один из этих ответов не показывает, что добавление промежуточного корневого CA в цепочку, вот несколько примеров с нулевой конфигурацией, с которыми можно поиграть:
Отрывок:
Это одна из тех вещей, которые часто проще, если вы не пытаетесь сделать это напрямую через connect или express, но позвольте нативному
https
модулю обработать это, а затем использовать это для обслуживания вашего приложения connect / express.Кроме того, если вы используете
server.on('request', app)
вместо передачи приложения при создании сервера, это дает вам возможность передатьserver
экземпляр какой-то функции инициализатора, которая создает приложение connect / express (если вы хотите использовать websockets через ssl на том же сервере, для пример).источник
Чтобы включить приложение для прослушивания как
http
иhttps
на порты80
и ,443
соответственно, выполните следующие действияСоздать экспресс-приложение:
Возвращаемое приложение
express()
является функцией JavaScript. Он может быть передан на HTTP-серверы Node как обратный вызов для обработки запросов. Это позволяет легко предоставлять как HTTP, так и HTTPS версии вашего приложения, используя одну и ту же кодовую базу.Вы можете сделать это следующим образом:
Для полной детализации смотрите документацию
источник
Вы также можете использовать это в архиве с платформой Fastify:
(и запустить
openssl req -nodes -new -x509 -keyout server.key -out server.cert
для создания файлов, если вам нужно написать тесты)источник
источник