使用SSL的npm http服务器

r1wp621o  于 2023-01-21  发布在  其他
关注(0)|答案(4)|浏览(230)

我正在使用npm包“http-server”(https://www.npmjs.com/package/http-server)来设置一个简单的Web服务器,但是我无法让它使用SSL。

http-server -p 8000 -o -S

在我的根目录下有一个cert.pem和key.pem(目前)。“-o”选项打开浏览器到默认页面,但该页面是使用HTTP提供的,甚至不能通过HTTPS访问。我没有收到任何错误或警告。我也尝试过添加“-C”和“-K”选项,但运气不好。有人成功地使用了这个包吗?

i7uq4tfw

i7uq4tfw1#

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

xxb16uws2#

我安装了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(用日语编写)

pftdvrlh

pftdvrlh3#

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

mbzjlibv

mbzjlibv4#

编辑:自从写了这个答案后,有一个新的工具mkcert可以帮你完成这个任务。请参见https://stackoverflow.com/a/61905546/9540493。下面是我的原始答案,以了解历史。

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

相关问题