如何在 localhost 上创建 https 服务器
Posted
技术标签:
【中文标题】如何在 localhost 上创建 https 服务器【英文标题】:How to create a https server on localhost 【发布时间】:2017-09-26 09:50:39 【问题描述】:我按照下面的教程创建了一个 https 服务器 https://docs.nodejitsu.com/articles/HTTP/servers/how-to-create-a-HTTPS-server/
程序运行无误
但是当我无法在我的 chrome 中打开 https://localhost:8000 时
它总是得到一个ERR_SSL_PROTOCOL_ERROR
【问题讨论】:
检查 https 是否有效是当今开发网站的一部分。谦虚的开发人员使用 localhost。我认为这个问题很好。 它可能更适合 Webmaster.SE,因为它更多的是设置环境,而不是这样的编码。 【参考方案1】:如果这是为了测试而您不需要有效的证书(似乎是这种情况,因为您使用的是“localhost”),您可以使用“自签名”证书,只需确保配置nginx 指向那些。
我可以解释细节,但实际上在 Digital Ocean 社区教程上有一篇很棒的帖子:
https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-nginx-in-ubuntu-16-04
如果您想在 8000 上监听,请务必调整端口 (443)。
【讨论】:
【参考方案2】:使用ngrok 是一种快速的方法。
它非常易于使用,只需几秒钟即可运行。就像下载系统版本一样简单。解压并运行ngrok.exe
。它将打开一个命令行类型的窗口。确保您的 Apache 服务器或您使用的服务器正在运行。
然后仅在 HTTPS 隧道端点上侦听运行以下命令
ngrok http -bind-tls=true site.dev:80
或在您需要安装https
的任何端口上。
打开浏览器并输入https://localhost/myApp
你会看到它的工作原理。
如果您输入http://localhost/myApp
,它也可以工作。
希望这对快速解决方案的任何人都有帮助。
【讨论】:
这不起作用。错误:You may only specify one port to tunnel to on the command line, got 3: [http -bind-tls=true site.dev:80]
这里的 site.dev 是什么?
@Pavan 看起来这是指,我引用 ngrok --help
文档,“将流量转发到 example.com:8000”。或者在这种情况下,“到 site.dev:80”。我改为使用ngrok http 3000 -subdomain=custom -bind-tls=true
,然后在本地访问https://custom.ngrok.io
。
这真是太棒了。超级简单的解决方案。感谢分享
它已经解决了我的问题,我在尝试其他方式,终于找到了在本地前进的方法......【参考方案3】:
我使用Caddyserver 和这样的配置:
:443
tls self_signed
【讨论】:
【参考方案4】:假设您使用的是 node.js,那么 http-server 具有 -S
或 --ssl
以及 -C
和 -K
以启用 https。
【讨论】:
刚刚尝试过,但 http-server 不支持密码,所以不知道它是如何工作的。 请记住,http-server 适合开发使用,但不一定适合生产使用。 TLS/SSL 模式不需要密码。 我没有用于生产,我在创建没有密码的自签名证书时遇到了问题 那么它就可以正常工作了,因为我已经用了很长时间了。【参考方案5】:你需要做两件事:
生成自签名 SSL 证书并 将其添加到受信任的证书中设法在这样的 macOS 上做到这一点:
为了生成 SSL 证书,请在终端中运行以下命令(根据 instructions from Let's Encrypt):openssl req -x509 -out localhost.crt -keyout localhost.key \
-newkey rsa:2048 -nodes -sha256 \
-subj '/CN=localhost' -extensions EXT -config <( \
printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")
要将证书添加到受信任的证书中,请运行以下命令(建议在 this blog 上):
sudo security add-trusted-cert -d -r trustRoot -k "/Library/Keychains/System.keychain" "/private/tmp/certs/certname.cer"
【讨论】:
抱歉,是因为 macOS 特定的解决方案而导致的否决票吗?我认为找到在其他操作系统上实现这一目标的方法是直截了当的,举个例子。我应该使响应独立于操作系统吗? 如果不是这样的话,如果我错了,请告诉我,这样我就不会犯同样的错误...... 我收到一个错误:读取文件 /private/tmp/certs/certname.cer 时出错 - 我似乎没有 certs 文件夹?【参考方案6】:我终于设置了我的 create-react-app https 开发服务器
我这样做的原因是为了在移动设备上测试设备运动 API。
安装 mkcert https://github.com/FiloSottile/mkcert
brew install mkcert
mkcert -install
生成证书文件。
mkcert -key-file ./.cert/key.pem -cert-file ./.cert/cert.pem "<LAN_IP_ADDRESS>"
使用 LAN IP 地址而不是“localhost”,因为我们将在连接到相同 WiFi 的移动设备上打开我们的 https 页面。
创建一个.env
文件来设置环境变量
HTTPS=true
SSL_CRT_FILE=./.cert/cert.pem
SSL_KEY_FILE=./.cert/key.pem
启动开发服务器
npm start
最后但同样重要的是,在移动设备上安装证书文件,mkcert
生成的.pem
文件在我的例子中位于~/Library/Application Support/mkcert
。
在 android 设备上安装证书文件
https://support.google.com/pixelphone/answer/2844832?hl=en
在 ios 设备上安装证书文件
在静态服务器上提供.pem
文件,并在Safari上打开文件地址
【讨论】:
【参考方案7】:Balloon Fight 提供的解决方案绝对是我一直在寻找的,并且有效。 但是提到的命令对我不起作用,所以这对我有用。
我正在使用 Lubuntu 20.04 LTS(64 位)。
Lubuntu 是一个轻量级的 Linux 风格,使用 Debian、Ubuntu 和 LXDE 作为其基础。
OSX 的步骤可能类似。还提到了适用于 Windows 和 Ubuntu GNOME 的步骤。
转到ngrok 并创建一个帐户。
下载ngrok并安装。
对于 Windows,只需解压缩文件并打开它。它会在 cmd 中运行。
对于 Ubuntu GNOME,您可能可以直接在终端中运行该文件。
对于 Lubuntu(或者如果以前对您不起作用)。 移动文件如下:
mv "path/to/ngrok" "/usr/bin/"
如果文件直接在终端或 cmd 中打开。将您在 ngrok 上的配置文件中的命令复制并粘贴到 cmd 或终端中。该命令如下所示:
./ngrok authtoken <your_auth_token>
如果您在 Lubuntu 上,或者文件没有直接在终端中打开。更改目录如下:
cd "/usr/bin/"
然后将命令从您在 ngrok 上的配置文件中复制并粘贴到终端中。该命令如下所示:
./ngrok authtoken <your_auth_token>
运行您的服务器。 Nodejs 或者你常用的。
如果您仍在与“ngrok”文件相同的目录中。将以下命令复制并粘贴到终端或 cmd:
ngrok http 3000 -host-header="localhost:3000"
将3000
更改为您用于本地服务器的端口。
如果您不在“ngrok”文件的目录中。在终端或cmd中打开它。
对于 Lubuntu,使用以下命令更改目录:
cd "/usr/bin/"
然后运行命令:
ngrok http 3000 -host-header="localhost:3000"
将3000
更改为您用于本地服务器的端口。
I got to know about this command from this video.
-
将第二个“转发”行中的 HTTPS 链接复制并粘贴到您的浏览器。
链接如下所示:https://12fab5c82c57.ngrok.io
下次你必须这样做。只需重复第 4、5 和 6 步即可。
【讨论】:
以上是关于如何在 localhost 上创建 https 服务器的主要内容,如果未能解决你的问题,请参考以下文章
如何在 localhost 上的 https 上运行 laravel
如何在开发环境中在 https://localhost 上测试我的 ASP.NET 页面? [复制]