使用 Let's Encrypt 保护你的网站
未加密的 HTTP 会话暴露于滥用之中，用 Let's Encrypt 把它们保护起来。
HTTPS
未加密的 HTTP 会话暴露于滥用之中，用 Let's Encrypt 把它们保护起来。

> 
> 未加密的 HTTP 会话暴露于滥用之中，用 Let's Encrypt 把它们保护起来。
> 
> 
> 


![](/data/attachment/album/201804/23/211532baza1a15yozo60o5.jpg)


曾几何时，通过证书授权机构搭建基本的 HTTPS 网站需要每年花费数百美元，而且搭建的过程复杂且容易出错。现在我们免费使用 [Let's Encrypt](https://letsencrypt.org)，而且搭建过程也只需要几分钟。


### 为何进行加密？


为什么要加密网站呢？这是因为未经加密的 HTTP 会话可以被多种方式滥用：


* 窃听用户数据包
* 捕捉用户登录
* 注入[广告](https://www.thesslstore.com/blog/third-party-content-injection/)和[“重要”消息](https://blog.ryankearney.com/2013/01/comcast-caught-intercepting-and-altering-your-web-traffic/)
* 注入[木马](https://www.eff.org/deeplinks/2018/03/we-still-need-more-https-government-middleboxes-caught-injecting-spyware-ads-and)
* 注入 [SEO 垃圾邮件和链接](https://techglimpse.com/wordpress-injected-with-spam-security/)
* 注入[挖矿脚本](https://thehackernews.com/2018/03/cryptocurrency-spyware-malware.html)


网络服务提供商就是最大的代码注入者。那么如何挫败它们的非法行径呢？你最好的防御手段就是 HTTPS。让我们回顾一下 HTTPS 的工作原理。


### 信任链


你可以在你的网站和每个授权访问用户之间建立非对称加密。这是一种非常强的保护：GPG（GNU Privacy Guard， 参考[如何在 Linux 中加密邮件](https://www.linux.com/learn/how-encrypt-email-linux))和 OpenSSH 就是非对称加密的通用工具。它们依赖于公钥-私钥对，其中公钥可以任意分享，但私钥必须受到保护且不能分享。公钥用于加密，私钥用于解密。


但上述方法无法适用于随机的网页浏览，因为建立会话之前需要交换公钥，你需要生成并管理密钥对。HTTPS 会话可以自动完成公钥分发，而且购物或银行之类的敏感网站还会使用第三方证书颁发机构（CA）验证证书，例如 Comodo、 Verisign 和 Thawte。


当你访问一个 HTTPS 网站时，网站给你的网页浏览器返回了一个数字证书。这个证书说明你的会话被强加密，而且提供了该网站信息，包括组织名称、颁发证书的组织和证书颁发机构名称等。你可以点击网页浏览器地址栏的小锁头来查看这些信息（图 1），也包括了证书本身。


![](/data/attachment/album/201804/23/211533f900n5d99900g9lg.png "页面信息")


*图1: 点击网页浏览器地址栏上的锁头标记查看信息*


包括 Opera、 Chromium 和 Chrome 在内的主流浏览器，验证网站数字证书的合法性都依赖于证书颁发机构。小锁头标记可以让你一眼看出证书状态；绿色意味着使用强 SSL 加密且运营实体经过验证。网页浏览器还会对恶意网站、SSL 证书配置有误的网站和不被信任的自签名证书网站给出警告。


那么网页浏览器如何判断网站是否可信呢？浏览器自带根证书库，包含了一系列根证书，存储在 `/usr/share/ca-certificates/mozilla/` 之类的地方。网站证书是否可信可以通过根证书库进行检查。就像你 Linux 系统上其它软件那样，根证书库也由包管理器维护。对于 Ubuntu，对应的包是 `ca-certificates`，这个 Linux 根证书库本身是[由 Mozilla 维护](https://www.mozilla.org/en-US/about/governance/policies/security-group/certs/policy/)的。


可见，整个工作流程需要复杂的基础设施才能完成。在你进行购物或金融等敏感在线操作时，你信任了无数陌生人对你的保护。


### 无处不加密


Let's Encrypt 是一家全球证书颁发机构，类似于其它商业根证书颁发机构。Let's Encrpt 由非营利性组织<ruby> 因特网安全研究小组 <rt>  Internet Security Research Group </rt></ruby>（ISRG）创立，目标是简化网站的安全加密。在我看来，出于后面我会提到的原因，该证书不足以胜任购物及银行网站的安全加密，但很适合加密博客、新闻和信息门户这类不涉及金融操作的网站。


使用 Let's Encrypt 有三种方式。推荐使用<ruby> 电子前沿基金会 <rt>  Electronic Frontier Foundation </rt></ruby>（EFF）开发的 [Cerbot 客户端](https://certbot.eff.org/)。使用该客户端需要在网站服务器上执行 shell 操作。


如果你使用的是共享托管主机，你很可能无法执行 shell 操作。这种情况下，最简单的方法是使用[支持 Let's Encrpt 的托管主机](https://community.letsencrypt.org/t/web-hosting-who-support-lets-encrypt/6920)。


如果你的托管主机不支持 Let's Encrypt，但支持自定义证书，那么你可以使用 Certbot [手动创建并上传你的证书](https://community.letsencrypt.org/t/web-hosting-who-support-lets-encrypt/6920)。这是一个复杂的过程，你需要彻底地研究文档。


安装证书后，使用 [SSL 服务器测试](https://www.ssllabs.com/ssltest/)来测试你的服务器。


Let's Encrypt 的电子证书有效期为 90 天。Certbot 安装过程中添加了一个证书自动续期的计划任务，也提供了测试证书自动续期是否成功的命令。允许使用已有的私钥或<ruby> 证书签名请求 <rt>  certificate signing request </rt></ruby>（CSR），允许创建通配符证书。


### 限制


Let's Encrypt 有如下限制：它只执行域名验证，即只要有域名控制权就可以获得证书。这是比较基础的 SSL。它不支持<ruby> 组织验证 <rt>  Organization Validation </rt></ruby>（OV）或<ruby> 扩展验证 <rt>  Extended Validation </rt></ruby>（EV），因为运营实体验证无法自动完成。我不会信任使用 Let's Encrypt 证书的购物或银行网站，它们应该购买支持运营实体验证的完整版本。


作为非营利性组织提供的免费服务，不提供商业支持，只提供不错的文档和社区支持。


因特网中恶意无处不在，一切数据都应该加密。从使用 [Let's Encrypt](https://letsencrypt.org/) 保护你的网站用户开始吧。


想要学习更多 Linux 知识，请参考 Linux 基金会和 edX 提供的免费课程 [“Linux 入门”](https://training.linuxfoundation.org/linux-courses/system-administration-training/introduction-to-linux)。




---


via: <https://www.linux.com/learn/intro-to-linux/2018/3/protect-your-websites-lets-encrypt>


作者：[CARLA SCHRODER](https://www.linux.com/users/cschroder) 选题：[lujun9972](https://github.com/lujun9972) 译者：[pinewall](https://github.com/pinewall) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出

