标签 Chrome 下的文章

介绍

目的

我们的目标就是在 Kali Linux 上安装好 Google Chrome Web 浏览器。同时,请参阅附录为可能出现的问题进行排查。

要求

需要获得已安装 Kali Linux 或者 Live 系统的特权。

困难程度

容易。

惯例

  • # - 给定命令需要以 root 用户权限运行或者使用 sudo 命令
  • $ - 给定命令以常规权限用户运行

步骤说明

下载 Google Chrome

首先,使用 wget 命令来下载最新版本的 Google Chrome 的 debian 安装包。

# wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

安装 Google Chrome

在 Kali Linux 安装 Google Chrome 最容易的方法就是使用 gdebi,它会自动帮你下载所有的依赖包。

# gdebi google-chrome-stable_current_amd64.deb

启动 Google Chrome

开启一个 终端 terminal ,执行 google-chrome 命令来启动 Google Chrome 浏览器。

$ google-chrome

附录

非法指令 Illegal Instruction

当以 root 用户特权来运行 google-chrome 命令是,会出现 非法指令 Illegal Instruction 错误信息。因为通常情况下,Kali Linux 默认情况下的默认用户是 root 用户,我们需要创建一个虚的非特权用户,比如 linuxconfig,然后使用这个用户来启动 Google Chrome 浏览器。如下:

# useradd -m -d /home/linuxconfig linuxconfig
# su linuxconfig -c google-chrome

libappindicator1 包未安装

dpkg: dependency problems prevent configuration of google-chrome-stable:
 google-chrome-stable depends on libappindicator1; however:
  Package libappindicator1 is not installed.

使用 gdebi 命令来安装 Google Chrome 的 debian 包可以解决依赖问题。参阅上文。

在 Kali Linux 中以普通用户启动 google chrome


译者简介:

GHLandy —— 生活中所有欢乐与苦闷都应藏在心中,有些事儿注定无人知晓,自己也无从说起。


via: https://linuxconfig.org/how-to-install-google-chrome-browser-on-kali-linux

作者:Lubos Rendek 译者:GHLandy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

昨晚偶尔清理 Chrome 插件时发现我的 “HTTP/2 and SPDY indicator”插件好像好久没亮了。这个插件在你访问到一个支持 HTTP/2 (或之前的 SPDY 协议)的网站时会点亮,而我明明记得之前专门让 https://linux.cn/ 支持了 HTTP/2 。

我的第一反应是不是这个插件有问题了?于是打开 Chrome 调试工具,然后发现,真的是请求和响应都是 HTTP/1.1 哎!

经过一番研究,原来是从 Chrome 51 开始,在 2016 年 5 月 31 日之前,对支持 NPN 协商协议的 HTTP/2 网站还会采用 HTTP/2 访问;而之后就只支持 ALPN 协商协议的 HTTP/2 网站了——而目前 ALPN 协议仅被鲜少有发行版支持 openssl-1.0.2 支持。

发生了什么?

服务器端

我们知道,最初的 Web 访问协议是 HTTP/1,包括以前的 HTTP/1.0 和现在大部分网站采用的 HTTP/1.1(HTTP/0.9 是试验性协议,已经废弃)。但是随着 Web 应用越来越复杂,之前的 HTTP/1.x 协议就看起来不能满足日益庞杂的 Web 服务需求了。比如说,明文请求、请求复用等问题。因此,谷歌就开发了一个新的传输层协议,名为 SPDY。由于这个新的协议用了的人都说好,因此谷歌就把这个协议提交到了 IETF,然后大家觉得,SPDY 这名字不好听(SPDY 是谷歌的注册商标),就干脆叫 HTTP/2 吧!

SPDY 协议是基于 SSL/TLS 的,谷歌开发了一个名为 下一代协议协商 Next Protocol Negotiation (NPN)的 SSL/TLS 扩展,用于在客户端连接服务器时协商是否采用 HTTP/2 协议。SPDY 协议是由 Web 服务器所实现支持的,而 NPN 则是由 OpenSSL 等 SSL 实现支持的。

但是,随着 SPDY 被提交到 IETF,然后变成了 HTTP/2 协议,谷歌也放弃了 SPDY 的开发,全力投入到了 HTTP/2 的开发中,之前所采用 NPN 也被一种新的协商协议 ALPN —— 应用层协议协商 Application-Layer Protocol Negotiation 所替代。NPN 和 ALPN 是不兼容的,它们的主要不同是:

  • NPN 是服务器发送所支持的协议列表,由客户端进行选择。而 ALPN 则是客户端发送该列表,由服务端选择。
  • 在 NPN 中,最终的选择结果是在 Change Cipher Spec 之后发送给服务端的,也就是说是被加密了的。而在 ALPN 中,所有的协商都是明文的。

这样做的好处主要是安全性方面的考虑,但是这造成了一个问题就是,NPN 已经广泛地被 OpenSSL 支持,而 ALPN 则目前只有最新的 openssl-1.0.2 才支持。当前的几个主流 Linux 发行版的 OpenSSL 版本以及支持的协商协议如下:

Linux 发行版OpenSSL 版本所支持的协商协议
CentOS/Oracle Linux/RHEL 5.10+0.9.8e不支持
CentOS/Oracle Linux/RHEL 6.5+, 7.0+1.0.1eNPN
Ubuntu 12.04 LTS1.0.1NPN
Ubuntu 14.04 LTS1.0.1fNPN
Ubuntu 16.04 LTS1.0.2gALPN 和 NPN
Debian 7.01.0.1eNPN
Debian 8.01.0.1kNPN

从上面我们可以看到,基本上所有的服务器级的 Linux 发行版都不支持 OpenSSL 及 ALPN,唯一支持的 Ubuntu 16.04 LTS 显然用的不会很多。不要小看这 0.0.1 的版本差异,对于别的软件来说这 0.0.1 的差异基本上可以忽略,但是对于 OpenSSL 来说,那就是两个版本代际。OpenSSL 是个相当底层的库,很多重要的软件都依赖于它,因此各个发行版在升级 OpenSSL 时采用的态度是相当保守,比如我们可以看看 CentOS 系统中有哪些软件使用了 OpenSSL:

$ lsof | grep libssl | awk '{print $1}' | sort | uniq
anvil
fail2ban
gdbus
gmain
httpd
postfix
mysqld
NetworkManager
nginx
php-fpm
puppet
sshd
sudo
tuned
zabbix_agent

没有经过足够的测试,Linux 发行版是不会在产品级(服务器级)的环境中随便升级的。为了解决旧版本(1.0.1)中的安全问题,他们宁可将新的版本(1.0.2)中安全修复移植回旧版本,也不会升级到有新功能的新版本(1.0.2),这就是你见到了各种 1.0.1e、1.0.1k 这样的版本号的原因。

当然,你可以自己编译一个最新 OpenSSL 替代你系统中的 openssl-1.0.1,但是我想你不会这样做的,是吧?

顺便提一句,NPN 和 ALPN 可以并存,但是会客户端会优先选择 ALPN。

浏览器端(Chrome)

从 Chrome 51 开始,谷歌就去掉了对 SPDY 的支持,不过这不是个事,因为不但使用 SPDY 的 Web 服务器比较少,而且从 SPDY 升级到 HTTP/2 也很简单,这方面 Nginx、Apache 等服务器的配置都很简单。

但不幸的是,在 Chrome 51 中,谷歌也去掉了对 NPN 的支持!如果你的 Web 服务器使用的是 openssl-1.0.2 以下的版本,不支持 ALPN 协商,那么 Chrome 51 及以后版本就会以 HTTP/1 协议访问你的网站。

谷歌对放弃 NPN 支持做了一个简短的解释,但是不管怎么说,NPN 协议在 Chrome 51 之后的版本不会再次回来了。而另一方面,OpenSSL 在 2016 年 12 月 31 日之后也不会继续发布 openssl-1.0.1 系列的新版本了,安全修复到此为止。

而在这种情况下,你原本支持 HTTP/2 的网站通过连接复用等 HTTP/2 所提供的新特性,在 Chrome 下访问取得了不错的体验,而现在又跌回了之前的残旧状态。

怎么办呢?

有几种办法:

换浏览器

山不来就我,我去就山。Chrome 51+ 不支持带 NPN 的 HTTP/2 网站,作为浏览者,你可以使用其它的浏览器,比如 Safari、Edge 之类的。这样,你就可以用新的协议来访问世界上那 10% 支持 HTTP/2 的 Web 服务器了。

但是,作为服务器运营者,你却不能忽视高达 50% 以上的 Chrome 用户

换服务器

如上面所示,Ubuntu 16.04 LTS 是目前唯一官方支持 openssl-1.0.2 的 Linux 发行版,如果你一直采用 Ubuntu 做服务器,考虑一下升级吧。LTS 版本的支持期长达五年。

当然,在产品环境中,即便你是 Ubuntu 服务器,更新版本也是一件重大事宜,宜慎思之。

重新编译

既然换服务器不是一个好的选择,那你还有一个方案,就是使用新的 openssl-1.0.2 源代码重新编译你的 Web 服务器,比如 nginx。

下面我简单介绍一下如何用 openssl-1.0.2 来编译 nginx。(1.0.2 系列的最新版本是 1.0.2j,当然你要非用 1.1.0,我也无话可说……)

首先下载并解压 openssl-1.0.2j:

# wget https://www.openssl.org/source/openssl-1.0.2j.tar.gz
# tar -zxvf openssl-1.0.2j.tar.gz

然后在编译 nginx 的时候使用 --with-openssl=../openssl-1.0.2j 选项以及你的其它选项:

./configure --with-openssl=../openssl-1.0.2j --with-http_v2_module --with-http_ssl_module

配置并编译之后,你可以用 nginx -V来看一下你的 nginx 中的 OpenSSL 版本。

这种自行编译的好处是灵活性高,但是你需要随时注意各个组件是否有严重的安全漏洞,并在出了修复版本之后重新编译。

容器

除了自己编译之外,如果你的系统环境中已经有了容器支持,你还可以在容器中运行一个 Ubuntu 16.04 LTS,并将 Web 服务器运行在其中。

总结

以上就是 HTTP/2 和 Chrome 之间的故事,你准备去升级 HTTP/2 支持了吗?要知道相比 HTTP/2 的访问体验,你肯定不会想再回到 HTTP/1 了。

Chromium 没有你想象的自由

UnGoogled Chromium 是一个 Chromium 浏览器的定制版本,但是不包括任何 Google 服务或功能。它不是一个 Google 的 Chrome 版本,而是一个 Chromium 版本——这是 Chrome、Vivaldi 和 Opera 等浏览器的开源代码母本。

虽然 Chromium 是一个开源项目,但是一直处于 Google 的影响之下,它的大多数贡献者都是 Google 工程师,因此 Chromium 的许多功能都包括了 Google 特有的服务。比如说,Chromium 预配置的搜索引擎是 Google、使用 Google 的 Safe Browsing API 来扫描每个你访问的 URL 的安全性,而且加载了一大堆的 Google 的二进制程序来提供各种内部服务。这意味着,许多用户数据仍然会被发往 Google 的服务器。

从 Chromium 中去除 Google 的部分

一位名为 Eloston 的开发者决定解决这个问题,他分叉了 Chromium 的源代码,并移除了各种 Google 特有的服务。据其说,他移除了 Safe Browsing API、WebRTC、Omnibox 地址栏搜索功能,以及各种 Google 域名下的服务,比如 Google 主机检测器、Google URL 跟踪器、Google 云消息等等。他也移除了 Google 加入其中的所有闭源二进制,这会影响到一些功能,比如 URL 自动格式化(比如地址栏自动隐藏 https://)。

此外,UnGoogled Chromium 也会强制在新选项卡打开弹窗,并允许用户保存更多 URL 类型的数据。

从截图上,UnGoogled Chromium 和其它的基于 Chromium 的浏览器看起来差不多,但是底层有了不少变化。

下载和源代码

下载地址: https://github.com/Eloston/ungoogled-chromium/releases/latest ,支持 Debian、Ubuntu、Windows、macOS。

源代码:https://github.com/Eloston/ungoogled-chromium

今日关注

据调查机构 Net Applications 的报告, Google Chrome 即将在桌面端取得 50% 的市场占有率。而自从微软决定在 Windows 10 中采用新的 Edge 浏览器(5%)起,IE 的份额就越来越低,现在只略高于 30%。Firefox 将近 8%。

Google Chrom 48.65%,Internet Explorer 31.65%

图文摘要

作为现存的最古老的 Linux 发行版, 也是笔者用过的第一个 Linux 发行版,Slackware Linux 刚刚发布了 14.2。作为坚守传统的代表,该发行版是目前少数的仍旧不使用 systemd 的主流 Linux 发行版之一。虽然如此,这并不代表 Slackware 很陈旧,这次发布的新版本中使用了 Linux 4.4 内核、支持 LLVM/Clang 的 GCC 5.3 编译器、 PHP 5.6.23、Python 2.7.11 等。

著名的 Linux 滚动发行版例行发布了新的 ISO 镜像:Arch Linux 2016.07.01。新用户可以用它安装,一滚到位。

著名的微型 Linux 发行版 4MLinux 发布了 18.0。

今天有一个里程碑的事件:谷歌的 Chrome 浏览器的市场占有率超过了微软的 IE,取得了市场占有率第一的排名。

这是由于微软在 Windows 10 中不再携带 IE,所以 IE 的占有率下降是必然的;而另外一方面,谷歌的 Chrome 却保持了持续增长的势头。据 Net Applications 四月份的最新调查数据显示,谷歌 Chrome 的占有率达到了 41.72%,而微软的 IE 则降到了 40.6%,虽然相差不大,但是按照现有的发展趋势,谷歌将很快取得更大的优势。当然,微软的 Edge 系列浏览器目前占有 4.64%,如果这个部分依旧是 IE 浏览器的话,显然微软目前还能暂时保持第一。

另外一个消息也是浏览器相关的,微软宣布它计划在今年夏天在 Edge 和 IE 中废弃对 SHA-1 证书的支持。也就是说,到时候使用更新后的 Edge 或 IE 访问 SHA-1 证书的 HTTPS 站点,将不会显示绿色的小锁,以表明其加密方案并不安全。而到 2017年2月时,微软会进一步对使用 SHA-1 签名证书的站点的访问进行默认拦截。

2014年,因为对 systemd 不满,一群开发者创建了不使用 systemd 的 Debian 分支 Devuan。现在,他们宣布发布了Devuan Jessie 的 beta 版本。Debian 8 Jessie 是在去年发布的,默认的初始化系统是 systemd,可选使用 sysvinit。Devuan 开发者称,Devuan 提供了从 Debian 7 Wheez 安全升级的路径,避免引入 systemd 导致的大部分问题。

之前,Ubuntu 的安装镜像会限制在 1GB 以内,但是 Ubuntu 16.04 LTS 的发布打破了这一限制,大小达到了1.4GB。因此,Canonical 决定将大小限制将提高到 2GB,甚至一些衍生版,比如 Ubuntu Studio 会将限制放到更大,比如一张 DVD 的大小4.7GB。

以下是一些开源软件的版本更新情况:

  • 历经了八个月的 beta 开发,Apricity OS 最近发布了第一个 RC 公测版本。它是一个基于 Arch Linux 的发行版,已经被下载超过了10万次。
  • OpenELEC 7.0 的第三个 beta 版本发布
  • 在上一个维护版本发布一个月之后,Git 发布了 2.8.2 版本,做了若干改进和错误修复。
  • Manjaro Linux LXQt 16.04 的一个衍生版 Manjaro Linux LXQt 16.04 黑暗版发布了,它使用了一个名为 Kwantum 的暗色系主题,以避免刺激眼睛。
  • 跨平台的开源多媒体播放软件 VLC 2.2 发布了第三个维护版本 2.2.3。

Manjaro Linux LXQt 16.04 Dark Edition

自从关注了 HTTPS,Linux 中国就成了 HTTPS 的铁杆粉丝了,不但传播了很多 HTTPS 相关的文章,而且身体力行的将 http://linux.cn也[切换](/article-5361-1.html)到了https://linux.cn 。非但如此,还激进地配置了 HSTS 策略。

HSTS 是什么?

如果一个 web 服务器支持 HTTP 访问,并将其重定向到 HTTPS 访问的话,那么访问者在重定向前的初始会话是非加密的。举个例子,比如访问者输入 http://www.foo.com/ 或直接输入 foo.com 时。

这就给了中间人攻击的一个机会,重定向可能会被破坏,从而定向到一个恶意站点而不是应该访问的加密页面。

HTTP 严格传输安全(HSTS)功能使 Web 服务器告知浏览器绝不使用 HTTP 访问,在浏览器端自动将所有到该站点的 HTTP 访问替换为 HTTPS 访问。

服务器开启 HSTS 的方法是,当客户端通过 HTTPS 发出请求时,在服务器返回的 HTTP 响应头中包含 Strict-Transport-Security 字段。浏览器接收到这样的信息之后,在一定期限内对该网站的任何请求都会以 HTTPS 发起,而不会以 HTTP 发起并由服务器重定向到 HTTPS。

所以,我们早早就配置上了 HSTS 响应头了。

当前浏览器对 HSTS 的支持如下,可见现代浏览器已经绝大部分支持了:

浏览器对 HSTS 的支持

HSTS 预载入列表

但是,这就够了么?如果一个用户从来没有以 HTTPS 方式访问过我们的网站呢,那显然就没有机会得到 HSTS 响应头,从而还是有可能以 HTTP 的方式进行首次访问——虽然我们已经做了很多自动和强制的引导,但是总还稍有缺憾?

所以,追求完美人们,又提出了一个 HSTS 预载入列表 preload list (友情提示,请自备梯子)。

谷歌在浏览器安全方面总是走在前面,因此它维护了一个预载入列表给 Chrome 使用,这个列表会硬编码到 Chrome 浏览器中。后来,Firefox、Safari、 IE 11 和 Edge 一想,得了,咱也别自己弄一个了,都采用这个列表吧。所以,各大浏览器都支持同一个列表了。

如果要想把自己的域名加进这个列表,需要满足以下条件:

  • 有效的证书(如果使用 SHA-1 证书,必须是 2016 年前就会过期的);
  • 将所有 HTTP 流量重定向到 HTTPS;
  • 确保所有子域名都启用了 HTTPS,特别是 www 子域;
  • 输出 HSTS 响应头:

    • max-age 至少需要 18 周(10886400 秒),其实在 ssllabs 的测试里面建议更长一些;
    • 必须指定 includeSubdomains 参数;
    • 必须指定 preload 参数;

HSTS 响应头范例:

Strict-Transport-Security: max-age=10886400; includeSubDomains; preload

注意,提交的申请并不是自动处理的,人工处理也许需要一周到几周,你可以在这个表单提交查询看看是否列入了。或者在你的 Chrome 浏览器中访问 <chrome://net-internals/#hsts> 查询是否列入。一般来说,即便你已经列入到这个列表,但是依旧需要几个月才能逐渐从 Chrome 的 canary 更新通道更新到 dev 、beta 等通道,直到最后的 stable 通道。

郑重警示:如果你并不能确定你的网站从此以后一直使用 HTTPS,那还是不要加入的好。因为,加入后很难撤销,你可以要求撤销,但是这个数据重新更新到稳定版的 Chrome 同样需要几个月,而别的浏览器是如何处理这个撤销数据的,则无法保证。

换句话说,只有 HTTPS 骨灰粉才应该考虑加入。

我们就是 HTTPS 骨灰粉!

任性的站长当然是 HTTPS 骨灰粉了,虽然“一入宫门深似海”,将来 HTTPS 会不会和 L2TP、PPTP 一样被限制也未可知,但是这么有 BIG 的事情怎么可以不做呢?

上个月15号,我修改了符合申请条件的 HTST 响应头,然后提交了申请。

今天晚上突然心血来潮,想着看看是否批准下来了:

linux.cn 列入 HSTS 预载入列表了

哈哈,通过了!

然后马上去 Chrome 里面查询——没有……好吧,我用的是稳定版的 Chrome。去下载 canary 通道的 Chrome 看看。安装后马上查询一下:

列入了静态 STS 域名了

果然列入了 canary 通道的 Chrome 里面!第一次在这个新开封的浏览器里面访问 linux.cn,马上就变成绿色的 https://linux.cn

绿色的 HTTPS 图标

去查询一下 Chrome 的代码看看:

列入了 transport_security_state_static.json

从现在的数据看,列表中总共才 4630 个域名,其中 .cn 的才 8 个。怎么样,你要不要也加入进来?