npm http-server with SSL

问题描述 投票:37回答:2

我正在使用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”选项而没有运气。这个套餐有没有成功?

node.js ssl npm httpserver
2个回答
121
投票

首先,请确保您有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

2
投票

仅供将来参考,我的问题通过将软件包更新到package.json中的最新版本来解决。我复制粘贴了一个旧的示例文件而没有更新版本号。


0
投票

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)
© www.soinside.com 2019 - 2024. All rights reserved.