node.js-具有SSL的npm http服务器

我正在使用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”选项而没有运气。 有没有人在这个程序包上取得了成功?

delucasvb asked 2020-06-23T03:25:02Z
3个解决方案
124 votes

首先,请确保您拥有-S-C文件。 您可以使用以下命令生成它们:

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

输入命令后,系统将提示您一些问题。 如果希望能够在操作系统的根证书存储区或浏览器中安装证书以使其受信任,请使用-S作为“公用名”的值。

这将生成一个证书密钥对,并且有效期约为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
slomek answered 2020-06-23T03:25:33Z
2 votes

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

delucasvb answered 2020-06-23T03:25:53Z
0 votes

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)添加到您的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)
Lasse Kärkkäinen answered 2020-06-23T03:26:27Z
translate from https://stackoverflow.com:/questions/35127383/npm-http-server-with-ssl