【问题标题】:HTTPS Certificate for internal use供内部使用的 HTTPS 证书
【发布时间】:2010-10-11 14:11:28
【问题描述】:

我正在为需要内部网络上通过 HTTPS 使用的系统设置网络服务器(无法从外部访问)

现在我用自签名证书设置了它,它工作正常,除了一个令人讨厌的警告,所有浏览器都会启动,因为用于签名它的 CA 机构自然是不受信任的。

访问由本地 DNS 服务器上解析的本地 DNS 域名提供(例如:https://myapp.local/),该地址将该地址映射到 192.168.x.y

是否有一些提供商可以为我颁发适当的证书以用于内部域名 (myapp.local)?还是我唯一的选择是在真实域上使用 FQDN,然后将其映射到本地 IP 地址?

注意:我想要一个不需要在每个浏览器上将服务器公钥标记为受信任的选项,因为我无法控制工作站。

【问题讨论】:

  • 有趣的问题!我没有真正的答案,但我希望“真正的”CA 不会颁发绑定到在某种程度上不是全球唯一的名称的证书。凭借其全局命名空间或可公开路由的 IP 地址,FQDN 是可以的,但私有名称可能会被欺骗。

标签: ssl https certificate


【解决方案1】:

仅用于开发目的

这个 docker 镜像解决了这个问题(感谢 local-ip.co):https://github.com/medic/nginx-local-ip

它会在端口 443 中启动一个反向代理,其公共证书适用于任何*.my.local-ip.co 域。例如。您的本地 IP 是 192.168.10.10 → 192-168-10-10.my.local-ip.co 已经指向它(这是一个公共域)!假设应用程序在您的计算机中的 8080 端口上运行,您只需执行此操作即可代理传递您的应用程序并在 URL https://192-168-10-10.my.local-ip.co 上公开它:

$ APP_URL=http://192.168.10.10:8080 docker-compose up

使用您在要访问应用的设备中配置的任何公共 DNS 解析域,但您的流量在您的应用和客户端之间保持本地(通过代理),因此您甚至可以使用它进行连接使用同一 LAN 网络中的设备,没有任何流量到 Internet,所有流量都是本地的。

对开发最有用的原因是任何人都可以使用相同的证书启动应用程序,因此并不安全,但当您需要在开发或测试时使用 HTTPS 公开您的应用程序时很有用(例如 Android 中的 HTML5 应用程序)加载了 Webview)。

【讨论】:

    【解决方案2】:

    我有类似的要求,让我们公司的浏览器信任我们的内部网站。

    我不希望我们的公共 DNS 为我们的内部站点发布公共 DNS,所以我发现完成这项工作的唯一方法是使用内部 CA。

    这里是这篇文章,

    https://medium.com/@mike.reider/getting-firefox-chrome-to-trust-your-internal-websites-internal-certificate-authority-a53ba2d4c2af

    【讨论】:

      【解决方案3】:

      我做了以下,这对我很有效:

      我获得了 *.mydomain.com 的通配符 SSL 证书(例如,Namecheap,以低廉的价格提供此证书)

      我创建了一条 CNAME DNS 记录,将“mybox.mydomain.com”指向“mybox.local”。

      希望对您有所帮助 - 不幸的是,您需要为您的域名购买通配符证书,但您可能已经拥有了。

      【讨论】:

      • 我有一个问题要问你。这种方法甚至适用于 mybox 的子域,例如 www.mybox.local、mobile.mybox.local、api、mybox.local?我的意思是,我只需设置一个指向 mybox.local 的 CNAME DNS 记录,以便在 mybox.local 的所有子域上启用 ssl?因为我有一个运行 Apache 的 Docker 容器和几个网站,我想使用 HTTPS 和我已经用于 HTTP 的 mybox.local 方法。
      • @noun 抱歉,我认为这种方法不适用于子域。事实上,经过进一步调查,大多数 DNS 服务器不会返回 .local 地址(这似乎只适用于 LAN 查找,例如来自家庭路由器)。最后,我只需要添加一条带有 LAN IP 地址的普通 A 记录(例如 192.168.1.123)就可以了。
      • 谢谢你,这是我的想法。
      • @paul 您能否进一步解释一下您的设置?据我所知,SSL 证书必须定期更新(例如,每 90 天使用 Let's Encrypt)。如果无法访问“外部世界”/互联网,那是不可能的,对吧?或者是否有其他方法可以在本地网络中的设备之间实现持久且安全的 SSL/TLS 连接?
      • @PaulHiggins,请问您是如何获得 SSL 证书的?我的意思是你有没有自签名?如果没有,是否可以自签名
      【解决方案4】:

      我认为答案是否定的。

      开箱即用,浏览器不会信任证书,除非它最终被预先编程到浏览器中的人验证,例如威瑞信,register.com。

      您只能获得全球唯一域的经过验证的证书。

      所以我建议您使用 myapp.local.yourcompany.com 而不是 myapp.local,如果您拥有 yourcompany.com,您应该能够获得证书。它会花费你想象的,每年几百美元。

      还要注意通配符证书可能只会下降到一个级别 - 因此您可以将其用于 a.yourcompany.com 和 local.yourcompany.com,但可能不能用于 bayourcompany.com 或 myapp.local.yourcompany.com,除非你付出更多。

      (有谁知道,是否取决于通配符证书的类型?是主要浏览器信任的子域吗?)

      【讨论】:

        【解决方案5】:

        我会将此添加为评论,但它有点长..

        这并不能真正回答您的问题,但实际上我发现不建议使用 .local 域 - 即使它在您的“本地”测试环境中,使用您自己的 DNS 服务器。

        我知道 Active Directory 在您安装 DNS 时默认使用 .local 名称,但即使是微软的人也说要避免使用它。

        如果您可以控制 DNS 服务器,则可以使用 .com、.net 或 .org 域 - 即使它只是内部的和私有的。这样,您实际上可以购买您在内部使用的域名,然后为该域名购买证书并将其应用于您的本地域。

        【讨论】:

        • .local 域意味着它将使用 mDNS 进行查找,因此网络上的任何人都可以“注册”任何 .local 域。这可能是一些人不建议使用它的原因。
        【解决方案6】:

        您必须询问典型的证书人员。不过,为了便于使用,我会使用 FQDN,您可以使用已注册子域的子域:https://mybox.example.com

        您可能还想查看通配符证书,为(例如)https://*.example.com/ 提供一揽子证书 - 如果您需要的不仅仅是这个证书,甚至可用于虚拟主机。

        认证 FQDN 的子域或子域应该是标准业务 - 也许不适合那些以在 2 分钟内提供证书而自豪的大人物。

        简而言之:要使证书受到工作站的信任,您必须要么

        • 更改工作站上的设置(您不需要)或
        • 使用已经信任的一方来签署您的密钥(您正在寻找解决办法)。

        都是你的选择。选择你的毒药。

        【讨论】:

          【解决方案7】:

          您有两个实用的选择:

          1. 建立您自己的 CA。您可以使用 OpenSSL 来实现,那里有很多 Google 信息。

          2. 继续使用您的自签名证书,但将公钥添加到浏览器中您受信任的证书中。如果您在 Active Directory 域中,这可以通过组策略自动完成。

          【讨论】:

          • 您的选项似乎是相反的顺序,因为如果手动添加不是一个选项,您应该只启动自己的 CA。 (不然好像用16吨的推土机去买菜)
          • 这似乎是正确的方法,但我想要一个不需要在每个浏览器上将 PK 标记为受信任的选项,因为我无法控制所有工作站。我会将其添加为问题的注释。
          猜你喜欢
          • 1970-01-01
          • 2022-08-04
          • 2011-12-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多