我可以允许出于开发目的对不安全的来源进行地理定位吗?
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 盒子)重复此过程。
- 向您的 DNS 添加一条 A 记录,将您要用于开发的域(比如
local-dev.yourdomain.com
)指向您的生产服务器。
- Install certbot 在生产服务器上,运行
certbot-auto certonly
为 local-dev.yourdomain.com
. 生成有效证书
- 将文件
/etc/letsencrypt/live/local-dev.yourdomain.com/fullchain.pem
和 /etc/letsencrypt/live/local-dev.yourdomain.com/privkey.pem
从您的生产服务器复制到您的 Homestead 机器。
- 更新您的 Homestead.yaml 文件以确保它将
local-dev.yourdomain.com
的请求定向到盒子上正确的代码目录。
- 在您的 Homestead 盒子上,分别用您在第 3 步中下载的
fullchain.pem
和 privkey.pem
文件覆盖文件 /etc/nginx/ssl/local-dev.yourdomain.com.crt
和 /etc/nginx/ssl/local-dev.yourdomain.com.key
。
- 更新开发机器上的主机文件,将
local-dev.yourdomain.com
指向 192.168.10.10(或在 Homestead.yaml 文件中指定的任何 ip)。
- 通过
https://local-dev.yourdomain.com
访问您的网站并享受来之不易的绿色挂锁图标。
明确配置 Chrome 以将您的(非 https)域视为安全域
Chrome 有一个 --unsafely-treat-insecure-origin-as-secure
启动标志可用于此目的,但它需要使用不同的用户配置文件(可通过第二个标志设置)才能工作。
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官方网站
我正在尝试开发一个使用 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 盒子)重复此过程。
- 向您的 DNS 添加一条 A 记录,将您要用于开发的域(比如
local-dev.yourdomain.com
)指向您的生产服务器。 - Install certbot 在生产服务器上,运行
certbot-auto certonly
为local-dev.yourdomain.com
. 生成有效证书
- 将文件
/etc/letsencrypt/live/local-dev.yourdomain.com/fullchain.pem
和/etc/letsencrypt/live/local-dev.yourdomain.com/privkey.pem
从您的生产服务器复制到您的 Homestead 机器。 - 更新您的 Homestead.yaml 文件以确保它将
local-dev.yourdomain.com
的请求定向到盒子上正确的代码目录。 - 在您的 Homestead 盒子上,分别用您在第 3 步中下载的
fullchain.pem
和privkey.pem
文件覆盖文件/etc/nginx/ssl/local-dev.yourdomain.com.crt
和/etc/nginx/ssl/local-dev.yourdomain.com.key
。 - 更新开发机器上的主机文件,将
local-dev.yourdomain.com
指向 192.168.10.10(或在 Homestead.yaml 文件中指定的任何 ip)。 - 通过
https://local-dev.yourdomain.com
访问您的网站并享受来之不易的绿色挂锁图标。
明确配置 Chrome 以将您的(非 https)域视为安全域
Chrome 有一个 --unsafely-treat-insecure-origin-as-secure
启动标志可用于此目的,但它需要使用不同的用户配置文件(可通过第二个标志设置)才能工作。
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官方网站