Включение поддержки https для локального nodejs
Для трехсторонней проверки подлинности (3-legged) некоторым службам требуется URL-адрес обратного вызова протокола https. В таком случае, чтобы локально проверить свой веб-сервис, вам нужно будет добавить поддержку https.
Одним из способов достижения этого в случае реализации проекта на nodejs является выполнение следующих двух шагов:
1) Создайте сертификат SSL и ключ для localhost
Комбинация двух ответов на stackoverflow имеет достаточно необходимой информации для выполнения обоих шагов. Ниже приведен пример генерации сертификатов в терминале:
- Создайте сертификат SSL для localhost (ссылка).
- openssl genrsa -des3 -out server.key 1024
- Здесь вам нужно ввести пароль, который вам нужно ввести на следующих шагах
(при запросе типа «Common Name» введите: localhost)
- openssl req -new -key server.key -out server.csr
- openssl x509 -req -days 1024 -in server.csr -signkey server.key -out server.crt
Кроме того, не забудьте пароль, который вы использовали, поскольку он понадобится нам на следующем шаге.
2) Используйте модуль https nodejs для маршрутизации всех ресурсов через https
Первоначально у меня был такой код:
- var app = require('./server/server');
- // Запустить сервер
- var server = app.listen(app.get('port'), function () {
- console.log('Начинаем в ' + (new Date()).toString());
- console.log('Сервер слушает на порту ' + server.address().port);
- });
Затем я добавил ссылку на модули https и fs в файле package.json и изменил код следующим образом:
- var app = require('./server/server');
- // Настройка локальной поддержки https
- var fs = require('fs');
- var https = require('https');
- var options = {
- key: fs.readFileSync('/etc/apache2/ssl/server.key'),
- cert: fs.readFileSync('/etc/apache2/ssl/server.crt'),
- passphrase: '<пароль, который вы использовали для сертификата>',
- requestCert: false,
- rejectUnauthorized: false
- };
- // Запустить сервер
- var server = https.createServer(options, app).listen(app.get('port'), function () {
- console.log('Начинаем в ' + (new Date()).toString());
- console.log('Сервер слушает на порту ' + server.address().port);
- });
Чистовая версия вашего веб-сервиса, вероятно будет опубликована там, где существует поддержка https по умолчанию (например, heroku), потому там не потребуется ваш самозаверяющийся сертификат.
В таком случае лучше всего объединить два решения и переключаться между ними в зависимости от среды:
- var app = require('./server/server');
- // В случае рабочей среды (например, herokuapp) https будет
- // предоставляем автоматически, в противном случае необходимо настроить локальный https
- // поддержка с использованием библиотеки https и нашего локально сохраненного ключа
- if (process.env.NODE_ENV === "production") {
- // Запустить сервер
- var server = app.listen(app.get('port'), function () {
- console.log('Начинаем в ' + (new Date()).toString());
- console.log('Сервер слушает на порту ' + server.address().port);
- });
- } else {
- // Настройка локальной поддержки https
- var fs = require('fs');
- var https = require('https');
- var options = {
- key: fs.readFileSync('/etc/apache2/ssl/server.key'),
- cert: fs.readFileSync('/etc/apache2/ssl/server.crt'),
- passphrase: '<пароль, который вы использовали для сертификата>',
- requestCert: false,
- rejectUnauthorized: false
- };
- // Запустить сервер
- var server = https.createServer(options, app).listen(app.get('port'), function () {
- console.log('Начинаем в ' + (new Date()).toString());
- console.log('Сервер слушает на порту ' + server.address().port);
- });
- }
Мои браузеры не слишком воодушевлены самоподписанными сертификатами, и потому вычеркивают часть https, но она все еще работает нормально и достаточно хороша для тестирования:
В качестве примера выше, достаточно взглянуть на этот проект github:
https://github.com/adamenagy/data.management-nodejs-integration.egnyte
Источник: https://forge.autodesk.com/blog/enable-https-local-nodejs
Включение поддержки https для локального nodejsОбсуждение: http://adn-cis.org/forum/index.php?topic=
Опубликовано 07.04.2017Отредактировано 08.04.2017 в 20:15:41