我可以允许出于开发目的对不安全的来源进行地理定位吗?

Can I permit geolocation for unsecured origins for development purposes?

我正在尝试开发一个使用 javascript 的地理定位功能的网络应用程序。从 50 版开始,Google Chrome has blocked access to its geolocation functions for origins not using HTTPS. That's not a problem when I deploy my code to a production environment (which has a valid SSL cert), but for development I'm just using a hosts file entry to preview my code running on a local VM (specifically, Laravel's Homestead),显然没有有效的 SSL 证书。

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

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

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

使用有效的 SSL 证书设置 Homestead

如果你有一个生产网络服务器和一个 public 域名的控制权,你可以使用 certbot 在该服务器上生成一个受信任的证书,然后将证书文件复制到你的 Homestead 盒子中以代替使用它自动生成的自签名证书。

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

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

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

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

来自Chromium wiki:

You can run chrome with the --unsafely-treat-insecure-origin-as-secure="http://example.com" flag (replacing "example.com" with the origin you actually want to test), which will treat that origin as secure for this session. Note that you also need to include the --user-data-dir=/test/only/profile/dir to create a fresh testing profile for the flag to work.

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

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

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

ngrok官方网站