SSL/TLS 加密新纪元 – Let’s Encrypt

vizv 的头像

·

·

·

16,064 次阅读

根据 Let’s Encrypt 官方博客消息,Let’s Encrypt 服务将在下周(11 月 16 日)正式对外开放。

Let’s Encrypt 项目是由 互联网安全研究小组 ISRG,Internet Security Research Group 主导并开发的一个新型 数字证书认证机构 CA,Certificate Authority 。该项目旨在开发一个自由且开放的自动化 CA 套件,并向公众提供相关的证书免费签发服务以降低安全通讯的财务、技术和教育成本。在过去的一年中,互联网安全研究小组拟定了 ACME 协议草案,并首次实现了使用该协议的应用套件:服务端 Boulder 和客户端 letsencrypt

至于为什么 Let’s Encrypt 让我们如此激动,以及 HTTPS 协议如何保护我们的通讯请参考浅谈 HTTPS 和 SSL/TLS 协议的背景与基础

Let's Encrypt

(题图来自:muylinux.com)

ACME 协议

Let’s Encrypt 的诞生离不开 ACME( 自动证书管理环境 Automated Certificate Management Environment )协议的拟定。

说到 ACME 协议,我们不得不提一下传统 CA 的认证方式。Let’s Encrypt 服务所签发的证书为 域名认证证书 DV,Domain-validated Certificate ,签发这类证书需要域名所有者完成以下至少一种 挑战 Challenge 以证明自己对域名的所有权:

  • 验证申请人对域名的 Whois 信息中邮箱的控制权;
  • 验证申请人对域名的常见管理员邮箱(如以 admin@postmaster@ 开头的邮箱等)的控制权;
  • 在 DNS 的 TXT 记录中发布一条 CA 提供的字符串;
  • 在包含域名的网址中特定路径发布一条 CA 提供的字符串。

不难发现,其中最容易实现自动化的一种操作必然为最后一条,ACME 协议中的 Simple HTTP 认证即是用一种类似的方法对从未签发过任何证书的域名进行认证。该协议要求在访问 http://域名/.well-known/acme-challenge/指定字符串 时返回特定的字符串。

然而实现该协议的客户端 letsencrypt 做了更多——它不仅可以通过 ACME 协议配合服务端 Boulder 的域名进行 独立 standalone 的认证工作,同时还可以自动配置常见的服务器软件(目前支持 Nginx 和 Apache)以完成认证。

Let’s Encrypt 免费证书签发服务

对于大多数网站管理员来讲,想要对自己的 Web 服务器进行加密需要一笔不小的支出进行证书签发并且难以配置。根据早些年 SSL Labs 公布的 2010 年互联网 SSL 调查报告(PDF) 指出超过半数的 Web 服务器没能正确使用 Web 服务器证书,主要的问题有证书不被浏览器信任、证书和域名不匹配、证书过期、证书信任链没有正确配置、使用已知有缺陷的协议和算法等。而且证书过期后的续签和泄漏后的吊销仍需进行繁琐的人工操作。

幸运的是 Let’s Encrypt 免费证书签发服务在经历了漫长的开发和测试之后终于来临,在 Let’s Encrypt 官方 CA 被广泛信任之前,IdenTrust 的根证书对 Let’s Encrypt 的二级 CA 进行了交叉签名使得大部分浏览器已经信任 Let’s Encrypt 签发的证书。

使用 letsencrypt

由于当前 Let’s Encrypt 官方的证书签发服务还未公开,你只能尝试开发版本。这个版本会签发一个 CA 标识为 happy hacker fake CA 的测试证书,注意这个证书不受信任。

要获取开发版本请直接:

$ git clone https://github.com/letsencrypt/letsencrypt

以下的使用方法摘自 Let’s Encrypt 官方网站。

签发证书

letsencrypt 工具可以协助你处理证书请求和验证工作。

自动配置 Web 服务器

下面的操作将会自动帮你将新证书配置到 Nginx 和 Apache 中。

$ letsencrypt run

独立签发证书

下面的操作将会将新证书置于当前目录下。

$ letsencrypt -d example.com auth

续签证书

默认情况下 letsencrypt 工具将协助你跟踪当前证书的有效期限并在需要时自动帮你续签。如果需要手动续签,执行下面的操作。

$ letsencrypt renew --cert-path example-cert.pem

吊销证书

列出当前托管的证书菜单以吊销。

$ letsencrypt revoke

你也可以吊销某一个证书或者属于某个私钥的所有证书。

$ letsencrypt revoke --cert-path example-cert.pem
$ letsencrypt revoke --key-path example-key.pem

Docker 化 letsencrypt

如果你不想让 letsencrypt 自动配置你的 Web 服务器的话,使用 Docker 跑一份独立的版本将是一个不错的选择。你所要做的只是在装有 Docker 的系统中执行:

$ sudo docker run -it --rm -p 443:443 -p 80:80 --name letsencrypt 
            -v "/etc/letsencrypt:/etc/letsencrypt" 
            -v "/var/lib/letsencrypt:/var/lib/letsencrypt" 
            quay.io/letsencrypt/letsencrypt:latest auth

你就可以快速的为自己的 Web 服务器签发一个免费而且受信任的 DV 证书啦!

Let’s Encrypt 的注意事项

  • Let’s Encrypt 当前发行的 DV 证书仅能验证域名的所有权,并不能验证其所有者身份;
  • Let’s Encrypt 不像其他 CA 那样对安全事故有保险赔付;
  • Let’s Encrypt 目前不提供 Wildcard 证书;
  • Let’s Encrypt 的有效时间仅为 90 天,逾期需要续签(可自动续签)。

对于 Let’s Encrypt 的介绍就到这里,让我们一起目睹这场互联网的安全革命吧。

6 条回复

  1. 来自四川成都的 Chromium 45.0|Ubuntu 用户 的头像
    来自四川成都的 Chromium 45.0|Ubuntu 用户

    很屌的样子

    来自成都
  2. arhool [Chrome 31.0|Windows 7] 的头像
    arhool [Chrome 31.0|Windows 7]

    坐等正常发布

    来自广州
  3. 来自河南郑州的 Chrome 45.0|Windows 7 用户 的头像
    来自河南郑州的 Chrome 45.0|Windows 7 用户

    个人认为Let’s Encrypt也不过那样:
    1,认证需要安装客户端,加大服务器管理难度
    2,证书只提供90天的有效期,相对于其它最多提供2年有效证书的CA来说没什么特点

    来自郑州
  4. linux [Chrome 46.0|Mac 10.11] 的头像
    linux [Chrome 46.0|Mac 10.11]

    确实,虽然这两点都是有专门的考量,但是对于我等已经熟悉了 SSL 配置的人,反而觉得不适合。
    对这两点,我觉得他们的考量是:
    1、有个客户端可以自动配置和更新,对于嫌配置麻烦的人来说很方便
    2、短期应该是避免证书失窃的考虑,反正可以自动更新

    来自北京
  5. 来自河南郑州的 Chrome 45.0|Windows 7 用户 的头像
    来自河南郑州的 Chrome 45.0|Windows 7 用户

    我觉得他们这一手倒不是怕用户证书失窃,不是有CRL嘛。这样反倒是像推APP的增加用户粘性似的。可能最大的问题是网站所有权认证。
    所以我觉得他们很有必要再搞一个网页版的自助申请渠道,把证书期限延长到2年,毕竟其使命是促进互联网安全嘛,如果不这样,我为什么不使用其它更方面免费的startssl, wosign呢?

    来自郑州
  6. 来自上海上海交通大学的 Chrome 46.0|GNU/Linux 用户 的头像
    来自上海上海交通大学的 Chrome 46.0|GNU/Linux 用户

    支持!非常适合需要证书,但是又无力承担证书费用的用户,这是对互联网安全的一大贡献。

    来自上海

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注