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」オプションを追加することもできました。このパッケージで成功した人はいますか?
将来の参考のために、package.jsonでパッケージを最新バージョンに更新することで問題を解決しました。バージョン番号を更新せずに、古いサンプルファイルをコピーアンドペーストしました。
最初に、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
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)