我正在尝试开发一个使用javascript地理定位功能的网络应用。从版本50开始,Google Chrome has blocked access to its geolocation functions for origins not using HTTPS。当我将代码部署到生产环境(具有有效的SSL证书)时,这不是问题,但是对于开发,我只是使用hosts文件条目来预览在本地VM上运行的代码(特别是Laravel的{{3 }}),显然没有有效的SSL证书。
有没有办法配置Google Chrome以允许访问我的开发虚拟机上的地理位置功能,即使它是“不安全的来源”?或者,有什么方法可以配置Homestead,以便Chrome认为它是安全的吗?
答案 0 :(得分:0)
这个问题的最简单答案是,Homestead实际上默认设置了自签名证书,因此通过HTTPS访问您的开发代码已经有效,尽管Chrome发出了无效的证书警告。但是,如果您接受该警告并同意继续访问不安全的网站, Chrome允许该网站使用地理位置,就好像它是安全的一样。
但是,如果这不是你的想法,还有其他选择:
如果您有生产网络服务器并控制公共域名,您可以使用certbot在该服务器上生成可信证书,然后将证书文件复制到您的Homestead框以使用而不是自签名证书自动生成。
此方法的缺点是证书certbot生成的证书仅在90天内有效,因此您需要每三个月重复此过程(或者您重新配置Homestead盒时)。
local-dev.yourdomain.com
)定向到您的生产服务器。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框。local-dev.yourdomain.com
的请求定向到该框上的正确代码目录。/etc/nginx/ssl/local-dev.yourdomain.com.crt
和/etc/nginx/ssl/local-dev.yourdomain.com.key
文件(分别)覆盖文件fullchain.pem
和privkey.pem
。local-dev.yourdomain.com
指向192.168.10.10(或在Homestead.yaml文件中指定的任何ip)。https://local-dev.yourdomain.com
访问您的网站,享受来之不易的绿色挂锁图标。 Chrome有一个--unsafely-treat-insecure-origin-as-secure
启动标志可用于此目的,但它需要使用不同的用户配置文件(可通过第二个标志设置)才能工作。
您可以使用--unsafely-treat-insecure-origin-as-secure =" http://example.com"运行chrome。标记(替换" example.com"使用您实际想要测试的原点),这会将该来源视为此会话的安全。请注意,您还需要包含--user-data-dir = / test / only / profile / dir来创建一个新的测试配置文件,以使该标志生效。
答案 1 :(得分:0)
使用您的配置(修改hosts文件以将域的DNS指向您的计算机),您可以使用例如加密来创建可信证书。
只是提到它,http://localhost被认为是安全的,并且chrome有一个--unsafely-treat-insecure-origin-as-secure启动标志,正如@ 4026在他的回答中提到的那样
答案 2 :(得分:0)
出于开发目的,我使用ngrok。您可以获得到localhost的安全隧道。这允许在本地调试webhook,测试移动应用程序或API,后端映射到http或https,非常易于安装和使用。
ngrok官方网站