【问题标题】:LetsEncrypt coverage on different portsLetsEncrypt 覆盖不同端口
【发布时间】:2016-04-15 21:26:53
【问题描述】:

所以我有一个 Apache 服务器在端口 443 上运行,NodeJS 安装在最新版本的 Ubuntu 上。现在我的一切都运行得很完美,除了我运行 NodeJS 服务器的端口 100 上没有 SSL。

当我将它切换到端口 80 并通过sudo 运行服务器时,它会报错,所以我当然不能这样做。是否有任何解决方案可以让 LetsEncrypt SSL 覆盖 443 和 80 以外的端口?

【问题讨论】:

    标签: javascript node.js apache ssl lets-encrypt


    【解决方案1】:

    端口 80 是 http 的标准端口(未加密)。

    端口 443 是 https 的标准端口(加密)。

    我所说的标准端口是指网络浏览器知道这些端口,因此不要指望您明确提供端口。所以https://www.example.comhttps://www.example.com:443 是相同的,但是因为您使用的是标准端口,所以不需要包含 :443 部分,因为浏览器会为您完成。

    您可以在任何端口上使用 SSL,因为它完全独立于端口,尽管有这些标准约定。例如,通常您永远不会在端口 80 上使用 SSL,因为这会破坏这些约定。

    因此,如果您想通过端口 100 使用 NodeJS 服务,那么您可以,但您需要在 URL 以及 https 协议中明确声明该端口。

    LetsEncrypt 并不在乎你使用哪个端口(除了验证部分,它将文件放在外部世界可联系的地方以证明你拥有域和密钥的所有权 - 就是你是谁在这里谈论?)。因此,您可以为 Apache 和 NodeJs 使用相同的证书。

    更好的解决方案是使用标准端口和 ProxyPass 来自 Apache 的节点服务(通常是纯 http,但如果需要也可以是 https): Apache and Node.js on the Same Server。这样你就可以让 Apache 监听端口 80(重定向到端口 443)和端口 443,节点服务只能通过 Apache 获得。

    【讨论】:

    • 我无法使用 ProxyPass 解决方案。我正在处理一个配置面板,并且我有一个表单需要发布到 NodeJS 以使某些事情发生。唯一的问题是我无法让 LetsEncrypt 覆盖其他端口(不是 80 和 443)。如何强制 LE 将 SSL 放在某个端口上?
    • 为什么不能让 ProxyPass 工作? “我如何强制 LE 将 SSL 放在某个端口上”是什么意思?证书与端口无关,因此不确定您为什么认为 LE 需要在这里做任何事情 - 除非我说您正在谈论让 LE 加载质询文件以确认所有权。
    【解决方案2】:

    您可以在不同的端口上使用 SSL,只要确保您在防火墙上允许它

    sudo ufw allow [port number]
    

    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 1970-01-01
      • 2023-01-30
      • 2016-04-24
      • 2011-12-04
      • 2017-10-20
      • 1970-01-01
      • 1970-01-01
      • 2018-05-06
      相关资源
      最近更新 更多