如何在 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 &lt;your_auth_token&gt;

如果您在 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

Safari在localhost上强制执行HTTPS

如何在开发环境中在 https://localhost 上测试我的 ASP.NET 页面? [复制]

如何在 Wie 网站中使用 Localhost 的输出?

在 Mac 上的 localhost xampp 上使用 https

在Windows上为localhost创建自签名证书