npm http-сервер с SSL

Я использую пакет npm "http-server" ( https://www.npmjs.com/package/http-server) для настройки простого веб-сервера, но не могу заставить его использовать SSL. Моя команда в package.json есть

http-server -p 8000 -o -S

с cert.pem и key.pem в моем корневом каталоге (на данный момент). Параметр "-o" открывает браузер для страницы по умолчанию, но страница обслуживается по протоколу HTTP и даже недоступна через HTTPS. Я не получаю никаких ошибок или предупреждений. Я также попытался добавить параметры "-C" и "-K" без удачи. Кто-нибудь имел успех с этим пакетом?

2 ответа

Решение

Просто для дальнейшего использования, моя проблема была решена путем обновления пакета до последней версии в package.json. Я скопировал и вставил старый пример файла без обновления номеров версий.

Во-первых, убедитесь, что у вас есть key.pem а также cert.pem файлы. Вы можете сгенерировать их с помощью этой команды:

openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem

Это генерирует пару ключ-сертификат, и она будет действительна в течение примерно 10 лет (точнее, 3650 дней).

Тогда вам нужно запустить сервер с -S для включения SSL и -C для вашего файла сертификата:

$ http-server -S -C cert.pem -o
Starting up http-server, serving ./ through https
Available on:
  https:127.0.0.1:8080
  https:192.168.1.101:8080
  https:192.168.1.104:8080
Hit CTRL-C to stop the server

Я установил mkcert:

brew install mkcert
brew install nss # if you use Firefox
mkcert -install

Затем в каталоге вашего проекта:

mkcert 0.0.0.0 localhost 127.0.0.1 ::1

Наконец, я переименовал сгенерированные файлы:

  • 0.0.0.0+3-key.pem -> key.pem
  • 0.0.0.0+3.pem -> cert.pem

И выполнил следующую команду:

http-server -S -C cert.pem -o

Потом я получил:

введите описание изображения здесь

Я сослался на этот блог: https://qiita.com/walkers/items/b90a97a99bbb27f6550f(написано на японском языке)

Firefox не принимал самозаверяющие сертификаты, поэтому потребовалось немного больше усилий. Сначала создайте CA:

openssl req -batch -new -newkey ec:<(openssl ecparam -name prime256v1) -nodes -keyout ca-key.pem -x509 -out ca.pem -days 3650 -subj "/CN=A localhost CA"

Добавьте ca.pem (локальный CA) к доверенным сертификатам вашей ОС и / или Firefox (другие браузеры используют системные CA). Храните файлы ca* в надежном месте для будущего использования, поэтому вам больше не придется делать это снова.

Затем для любого сайта, на котором вы работаете, и всякий раз, когда вы хотите изменить настройки, создайте cert.pem и key.pem с помощью:

openssl req -batch -new -newkey ec:<(openssl ecparam -name prime256v1) -nodes -keyout key.pem -subj /CN=localhost | openssl x509 -req -CAkey ca-key.pem -CA ca.pem -CAcreateserial -out cert.pem -days 365 -extfile <(echo subjectAltName=DNS:localhost)

Одни и те же команды в несколько строк для удобства чтения:

# Create CA
openssl req -batch -new -newkey ec:<(openssl ecparam -name prime256v1) -nodes \
  -keyout ca-key.pem -x509 -out ca.pem -days 3650 -subj "/CN=A localhost CA"

# Create a CSR for localhost, then sign it by CA
openssl req -batch -new -newkey ec:<(openssl ecparam -name prime256v1) -nodes \
  -keyout key.pem -subj /CN=localhost | \
  openssl x509 -req -CAkey ca-key.pem -CA ca.pem -CAcreateserial -out cert.pem \
  -days 365 -extfile <(echo subjectAltName=DNS:localhost)
Другие вопросы по тегам