【问题标题】:Can I permit geolocation for unsecured origins for development purposes?我可以出于开发目的允许对不安全来源进行地理定位吗?
【发布时间】:2016-11-27 08:38:36
【问题描述】:

我正在尝试开发一个使用 javascript 地理定位功能的网络应用程序。从版本 50 开始,Google Chrome has blocked access to its geolocation functions for origins not using HTTPS。当我将代码部署到生产环境(具有有效的 SSL 证书)时,这不是问题,但对于开发,我只是使用主机文件条目来预览在本地 VM 上运行的代码(特别是 Laravel 的 Homestead ),显然没有有效的 SSL 证书。

有没有办法配置 Google Chrome 以允许访问我的开发 VM 上的地理定位功能,即使它是“不安全的来源”?或者,我有什么方法可以配置 Homestead,让 Chrome 相信它是安全的?

【问题讨论】:

    标签: javascript google-chrome ssl geolocation homestead


    【解决方案1】:

    通过您的配置(修改 hosts 文件以将您的域的 DNS 指向您的机器),您可以创建一个受信任的证书,例如使用 let's encrypt。

    顺便提一下,http://localhost 被认为是安全的,并且 chrome 有一个 --unsafely-treat-insecure-origin-as-secure 启动标志,正如@4026 在他的回答中提到的那样

    【讨论】:

    • 您是否有一些文档的链接,以了解如何使用 let's encrypt 为 VM 创建受信任的证书?我只能找到创建自签名证书的指南...
    • 我已经阅读了 certbot 文档,我几乎可以肯定它不支持以我需要的方式使用。需要明确的是,我的 VM: 正在我的开发 PC 上运行;除了那台 PC 之外的任何东西都无法访问;由于其主机文件中的条目,因此仅从该 PC 的角度具有其域名。除此之外,似乎能够为实际上是任意域的内容创建受信任的证书是非常不安全的。
    • gethttpsforfree.com 可以帮助您。当然,您仍然需要能够将文件放在您想要证书的域的公共服务器上
    【解决方案2】:

    这个问题最简单的答案是 Homestead 实际上默认设置了自签名证书,因此通过 HTTPS 访问您的开发代码已经可以工作,尽管 Chrome 会发出无效证书警告。但是,如果您接受该警告并同意继续访问不安全的网站,Chrome 将允许该网站使用地理定位,就好像它是安全的一样

    但是,如果您不喜欢,还有其他选择:

    使用有效的 SSL 证书设置 Homestead

    如果您有生产网络服务器并控制公共域名,您可以使用 certbot 在该服务器上生成受信任的证书,然后将证书文件复制到您的 Homestead 盒子以使用它而不是自签名证书自动生成。

    这种方法的缺点是 certbot 生成的证书仅在 90 天内有效,因此您需要每三个月(或在您重新配置 Homestead 盒子的任何时候)重复此过程。

    1. 向您的 DNS 添加一条 A 记录,将您要用于开发的域(例如 local-dev.yourdomain.com)定向到您的生产服务器。
    2. 在生产服务器上运行Install certbot,并运行certbot-auto certonly 以生成local-dev.yourdomain.com 的有效证书。
    3. 将文件 /etc/letsencrypt/live/local-dev.yourdomain.com/fullchain.pem/etc/letsencrypt/live/local-dev.yourdomain.com/privkey.pem 从您的生产服务器复制到您的 Homestead box。
    4. 更新您的 Homestead.yaml 文件,以确保它将对 local-dev.yourdomain.com 的请求定向到盒子上正确的代码目录。
    5. 在您的 Homestead 盒子上,分别使用您在第 3 步中下载的 fullchain.pemprivkey.pem 文件覆盖文件 /etc/nginx/ssl/local-dev.yourdomain.com.crt/etc/nginx/ssl/local-dev.yourdomain.com.key
    6. 更新开发机器上的 hosts 文件,将 local-dev.yourdomain.com 指向 192.168.10.10(或 Homestead.yaml 文件中指定的任何 ip)。
    7. 通过https://local-dev.yourdomain.com 访问您的网站并享受来之不易的绿色挂锁图标。

    明确配置 Chrome 以将您的(非 https)域视为安全

    Chrome 有一个可用于此目的的 --unsafely-treat-insecure-origin-as-secure 启动标志,但它需要使用不同的用户配置文件(可通过第二个标志设置)才能工作。

    来自Chromium wiki

    您可以使用 --unsafely-treat-insecure-origin-as-secure="http://example.com" 标志运行 chrome(将“example.com”替换为您实际要测试的来源),它将将该来源视为本次会话的安全来源。请注意,您还需要包含 --user-data-dir=/test/only/profile/dir 以创建新的测试配置文件以使该标志起作用。

    【讨论】:

    • 请注意,打开该标志浏览网页是不安全的。
    【解决方案3】:

    出于开发目的,我使用 ngrok。您可以获得到 localhost 的安全隧道。这允许在本地调试 webhook,测试移动应用程序或 API,后端映射到 http 或 https,安装和使用非常简单。

    ngrok官网

    【讨论】:

      猜你喜欢
      • 2021-05-14
      • 2018-03-26
      • 1970-01-01
      • 2012-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-30
      相关资源
      最近更新 更多