【问题标题】:How to create a https server on localhost如何在 localhost 上创建 https 服务器
【发布时间】: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,因为它更多的是设置环境,而不是这样的编码。

标签: ssl https localhost


【解决方案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 上做到这一点:

      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 的步骤。


        1. 转到ngrok 并创建一个帐户。

        2. 下载ngrok并安装。

        对于 Windows,只需解压缩文件并打开它。它会在 cmd 中运行。

        对于 Ubuntu GNOME,您可能可以直接在终端中运行该文件。

        对于 Lubuntu(或者如果以前对您不起作用)。 移动文件如下:

        mv "path/to/ngrok" "/usr/bin/"
        
        1. 如果文件直接在终端或 cmd 中打开。将您在 ngrok 上的配置文件中的命令复制并粘贴到 cmd 或终端中。该命令如下所示:

          ./ngrok authtoken &lt;your_auth_token&gt;

        如果您在 Lubuntu 上,或者文件没有​​直接在终端中打开。更改目录如下:

        cd "/usr/bin/"
        

        然后将命令从您在 ngrok 上的配置文件中复制并粘贴到终端中。该命令如下所示:

        ./ngrok authtoken <your_auth_token>
        
        1. 运行您的服务器。 Nodejs 或者你常用的。

        2. 如果您仍在与“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.

        1. 将第二个“转发”行中的 HTTPS 链接复制并粘贴到您的浏览器。

        链接如下所示:https://12fab5c82c57.ngrok.io

        下次你必须这样做。只需重复第 4、5 和 6 步即可。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-09-18
          • 2013-08-20
          • 1970-01-01
          • 1970-01-01
          • 2020-01-18
          • 2012-10-04
          • 1970-01-01
          相关资源
          最近更新 更多