簡體   English   中英

帶有 SSL 的 npm http-server

[英]npm http-server with 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”選項,但沒有運氣。 有沒有人用這個包成功過?

首先,確保您有key.pemcert.pem文件。 您可以使用以下命令生成它們:

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

輸入命令后,系統會提示您幾個問題。 如果您希望能夠在操作系統的根證書存儲區或瀏覽器中安裝證書以使其受信任,請使用127.0.0.1作為“通用名稱”的值。

這會生成一個證書密鑰對,有效期大約為 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 (日文寫的)

僅供將來參考,我的問題已通過將包更新到 package.json 中的最新版本來解決。 我復制粘貼了一個舊的示例文件而不更新版本號。

Firefox 不接受自簽名證書,因此需要付出更多努力。 首先創建一個 CA:

openssl req -batch -new -newkey ec:(openssl ecparam -name prime256v1|psub) -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|psub) -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|psub)

以上應該適用於大多數系統。 如果沒有,您可能需要創建臨時文件 ecparam.tmp 和 ext.tmp。 功能上等同於兩個 oneliner 的命令:

# Output Elliptic Curve parameters to a temporary file
openssl ecparam -name prime256v1 -out ecparam.tmp

# Create CA
openssl req -batch -new -newkey ec:ecparam.tmp -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
echo subjectAltName=DNS:localhost > ext.tmp
openssl req -batch -new -newkey ec:ecparam.tmp -nodes -keyout key.pem \
  -subj /CN=localhost | openssl x509 -req -CAkey ca-key.pem -CA ca.pem \
  -CAcreateserial -out cert.pem -days 365 -extfile ext.tmp

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM