Как включить HTTPS на localhost для Node.js приложения
Порой нам бывает нужно проверить некоторые функции нашего веб приложения, которые зависят от HTTPS подключения (например, OAuth). Давайте разберемся как создать и установить поддельный сертификат HTTPS чтобы увидеть в браузере 🔒 "заветный замочек" безопасного подключения.
mkcert - это программа для создания верифицированных, локальных сертификатов для разработки. Программа максимально проста в использовании и не требует конфигурации.
Я рекомендую использовать NPM или Yarn для установки этой программы, но вы также можете загрузить бинарники со страницы релизов на Github страничке проекта.
npm install -g mkcert
- Перейдите в папку в которой будут созданы сертификаты, например
C:/
- Создайте Root сертификат используя команду:
mkcert create-ca
- Создайте localhost сертификат используя команду:
mkcert create-cert
В результате выполнения этих команд будет создано несколько файлов: ca.crt
, ca.key
, cert.crt
, cert.key
.
Прежде чем мы запустим наше node.js приложение, необходимо корректно установить созданные сертификаты на ваше железо.
Windows 10 распознает *.crt файлы, так что просто нажмите два раза на фаил ca.crt
чтобы открыть диалог импорта сертификата:
- Нажмите [Установить Сертификат...]
- Оставьте опцию "Текущий Пользователь" по-умолчанию и нажмите [Далее]
- Выберите "Расположить все сертификаты в указанное хранилище", затем нажмите [Выбрать]
- Выберите "Trusted Root Certification Authorities" из списка
- Нажмите [Далее] и затем [Завершить]
Этих действий должно быть достаточно чтобы сертификаты начали работать в браузерах Chrome, Edge и IE11.
Если вы планируете работать с Firefox, попробуйте одно из этих решений:
Решение 1:
- Откройте
about:config
страницу в Firefox и установите параметрsecurity.enterprise_roots.enabled
в значениеtrue
Решение 2:
- Откройте
about:preferences#privacy
и перейдите вСертификаты > Импорт
, затем выберите фаилca.crt
и нажмите [Подтвердить]
Давайте создадим простое node.js приложение server.js
чтобы проверить работоспособность HTTPS:
const https = require("https");
const fs = require("fs");
const port = 3001;
const options = {
key: fs.readFileSync("cert.key"),
cert: fs.readFileSync("cert.crt"),
};
const app = function (req, res) {
res.writeHead(200);
res.end("Hello HTTPS!");
};
https.createServer(options, app).listen(port);
console.log(`Server is running on port ${port}`);
Как видим из кода выше, сертификаты импортируются из той же директории, что и фаил server.js
. Убедитесь, что вы перенесли сертификаты в папку с файлом кода.
Запустите сервер:
node server.js
Перейдите в браузере на страницу https://localhost:3001 чтобы увидеть Hello HTTPS!
. Если вы не наблюдаете никаких предупреждений браузера связанных с сертификатом, то значит мы справились 😉!
Похожие публикации