web-dev-qa-db-ja.com

npm http-server with SSL

Npmパッケージ "http-server"( https://www.npmjs.com/package/http-server )を使用して単純なWebサーバーをセットアップしていますが、使用できませんSSL。 package.jsonの私のコマンドは

http-server -p 8000 -o -S

ルートディレクトリにcert.pemとkey.pemを使用します(今のところ)。 「-o」オプションを使用すると、ブラウザでデフォルトページが開きますが、ページはHTTPを使用して提供され、HTTPSからもアクセスできません。エラーや警告は表示されません。 「-C」および「-K」オプションを追加することもできました。このパッケージで成功した人はいますか?

45
delucasvb

将来の参考のために、package.jsonでパッケージを最新バージョンに更新することで問題を解決しました。バージョン番号を更新せずに、古いサンプルファイルをコピーアンドペーストしました。

2
delucasvb

最初に、key.pemおよびcert.pemファイルがあることを確認してください。次のコマンドを使用してそれらを生成できます。

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

コマンドを入力すると、いくつかの質問が表示されます。 OSのルート証明書ストアまたはブラウザーに証明書をインストールして、信頼できるようにする場合は、「共通名」の値として127.0.0.1を使用します。

これにより、証明書とキーのペアが生成され、約10年間(正確には3650日間)有効になります。

次に、SSLを有効にする-Sと証明書ファイルの-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
121
slomek

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(A localhost CA)をOSおよび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)
0