FCon7折倒计时最后一周:日程已上线70%!查看详情>>> 了解详情
写点什么

Let's Encrypt 宣布支持通配符证书,所有子域名可轻松开启 HTTPS

  • 2018-03-13
  • 本文字数:3979 字

    阅读完需:约 13 分钟

3 月 14 日,Let’s Encrypt 的执行董事 Josh Aas对外宣布,他们的通配符证书正式上线,用户可以基于此特性轻松部署/ 开启所有子域名的HTTPS 功能。

Let’s Encrypt 是国外一个公共的免费 SSL 项目,由 Linux 基金会托管,它的来头不小,由 Mozilla、思科、Akamai、IdenTrust 和 EFF 等组织发起,目的就是向网站自动签发和管理免费证书,以便加速互联网由 HTTP 过渡到 HTTPS,目前 Facebook 等大公司开始加入赞助行列。

Let’s Encrypt 已经得了 IdenTrust 的交叉签名,这意味着其证书现在已经可以被 Mozilla、Google、Microsoft 和 Apple 等主流的浏览器所信任,用户只需要在 Web 服务器证书链中配置交叉签名,浏览器客户端会自动处理好其它的一切,Let’s Encrypt 安装简单,使用非常方便。

本文将会详细介绍如何使用 Let’s Encrypt 通配符证书。

什么是 Let’s Encrypt?

部署 HTTPS 网站的时候需要证书,证书由 CA 机构签发,大部分传统 CA 机构签发证书是需要收费的,这不利于推动 HTTPS 协议的使用。

Let’s Encrypt 也是一个 CA 机构,但这个 CA 机构是免费的!也就是说签发证书不需要任何费用。

Let’s Encrypt 由于是非盈利性的组织,需要控制开支,他们搞了一个非常有创意的事情,设计了一个 ACME 协议,目前该协议的版本是 v1。
那为什么要创建 ACME 协议呢,传统的 CA 机构是人工受理证书申请、证书更新、证书撤销,完全是手动处理的。而 ACME 协议规范化了证书申请、更新、撤销等流程,只要一个客户端实现了该协议的功能,通过客户端就可以向 Let’s Encrypt 申请证书,也就是说 Let’s Encrypt CA 完全是自动化操作的。

任何人都可以基于 ACME 协议实现一个客户端,官方推荐的客户端是 Certbot

什么是通配符证书

在没有出现通配符证书之前,Let’s Encrypt 支持两种证书。

1)单域名证书:证书仅仅包含一个主机。

2)SAN 证书:一张证书可以包括多个主机(Let’s Encrypt 限制是 20),也就是证书可以包含下列的主机: www.example.com www.example.cn blog.example.com 等等。

证书包含的主机可以不是同一个注册域,不要问我注册域是什么?注册域就是向域名注册商购买的域名。

对于个人用户来说,由于主机并不是太多,所以使用 SAN 证书完全没有问题,但是对于大公司来说有一些问题:

  • 子域名非常多,而且过一段时间可能就要使用一个新的主机。
  • 注册域也非常多。

读者可以思考下,对于大企业来说,SAN 证书可能并不能满足需求,类似于 sina 这样的网站,所有的主机全部包含在一张证书中,而使用 Let’s Encrypt 证书是无法满足的。

Let’s Encrypt 通配符证书

通配符证书就是证书中可以包含一个通配符,比如 .example.com、.example.cn,读者很快明白,大型企业也可以使用通配符证书了,一张证书可以防止更多的主机了。

这个功能可以说非常重要,从功能上看 Let’s Encrypt 和传统 CA 机构没有什么区别了,会不会触动传统 CA 机构的利益呢?

如何申请 Let’s Encrypt 通配符证书

为了实现通配符证书,Let’s Encrypt 对 ACME 协议的实现进行了升级,只有 v2 协议才能支持通配符证书。

也就是说任何客户端只要支持 ACME v2 版本,就可以申请通配符证书了,是不是很激动。

读者可以查看下自己惯用的客户端是不是支持 ACME v2 版本,官方介绍 Certbot 0.22.0 版本支持新的协议版本,我立刻进行了升级:

复制代码
./certbot-auto -V
Upgrading certbot-auto 0.21.1 to 0.22.0...
Replacing certbot-auto...
./certbot-auto -V
certbot 0.22.0

在了解该协议之前有几个注意点:

1)客户在申请 Let’s Encrypt 证书的时候,需要校验域名的所有权,证明操作者有权利为该域名申请证书,目前支持三种验证方式:

  • dns-01:给域名添加一个 DNS TXT 记录。
  • http-01:在域名对应的 Web 服务器下放置一个 HTTP well-known URL 资源文件。
  • tls-sni-01:在域名对应的 Web 服务器下放置一个 HTTPS well-known URL 资源文件。

而申请通配符证书,只能使用 dns-01 的方式。

2)ACME v2 和 v1 协议是互相不兼容的,为了使用 v2 版本,客户端需要创建另外一个账户(代表客户端操作者),以 Certbot 客户端为例,大家可以查看:

复制代码
$ tree /etc/letsencrypt/accounts
.
├── acme-staging.api.letsencrypt.org
└── acme-v01.api.letsencrypt.org

3)Enumerable Orders 和限制

为了实现通配符证书,Let’s Encrypt 在申请者身份校验上做了很大的改变。

  • 有了订单 ID 的概念,主要是为了追踪通配符域名。
  • 申请限制,在 V1 版本,Let’s Encrypt 为了避免滥操作,对申请证书有一些限制(很难学习,但是正常使用不会遇到该限制)。而 v2 版本,对于通配符证书,多了一个限制,New Orders per Account(每个证书订单数限制)。

这两个细节,后续再仔细研究。

实践测试

我迫不及待想使用 Certbot 申请通配符证书,升级 Certbot 版本运行下列命令:

复制代码
$ certbot-auto certonly -d *.newyingyong.cn --manual --preferred-challenges dns
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Obtaining a new certificate
The currently selected ACME CA endpoint does not support issuing wildcard certificates.

参数说明:

  • certonly,插件,Certbot 有很多插件,不同的插件都可以申请证书,用户可以根据需要自行选择
  • -d 为那些主机申请证书,如果是通配符,输入 *.newyingyong.cn
  • –preferred-challenges dns,使用 DNS 方式校验域名所有权

接下去就是命令行的输出:

复制代码
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): ywdblog@gmail.com
-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A
Plugins selected: Authenticator manual, Installer None
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for newyingyong.cn
-------------------------------------------------------------------------------
NOTE: The IP of this machine will be publicly logged as having requested this
certificate. If you're running certbot in manual mode on a machine that is not
your server, please ensure you're okay with that.
Are you OK with your IP being logged?
-------------------------------------------------------------------------------
(Y)es/(N)o: y

上述有两个交互式的提示:

  • 是否同意 Let’s Encrypt 协议要求
  • 询问是否对域名和机器(IP)进行绑定

确认同意才能继续。

继续查看命令行的输出,非常关键:

复制代码
-------------------------------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.newyingyong.cn with the following value:
2_8KBE_jXH8nYZ2unEViIbW52LhIqxkg6i9mcwsRvhQ
Before continuing, verify the record is deployed.
-------------------------------------------------------------------------------
Press Enter to Continue
Waiting for verification...
Cleaning up challenges

要求配置 DNS TXT 记录,从而校验域名所有权,也就是判断证书申请者是否有域名的所有权。

上面输出要求给 _acme-challenge.newyingyong.cn 配置一条 TXT 记录,在没有确认 TXT 记录生效之前不要回车执行。

我使用的是阿里云的域名服务器,登录控制台操作如下图:

然后输入下列命令确认 TXT 记录是否生效:

复制代码
$ dig -t txt _acme-challenge.newyingyong.cn @8.8.8.8
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;_acme-challenge.newyingyong.cn. IN TXT
;; ANSWER SECTION:
_acme-challenge.newyingyong.cn. 599 IN TXT "2_8KBE_jXH8nYZ2unEViIbW52LhIqxkg6i9mcwsRvhQ"

确认生效后,回车执行,输出如下:

复制代码
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/newyingyong.cn/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/newyingyong.cn/privkey.pem
Your cert will expire on 2018-06-12. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again. To non-interactively renew *all* of your certificates, run
"certbot-auto renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

恭喜您,证书申请成功,证书和密钥保存在下列目录:

复制代码
$ tree /etc/letsencrypt/archive/newyingyong.cn
.
├── cert1.pem
├── chain1.pem
├── fullchain1.pem
└── privkey1.pem

然后校验证书信息,输入如下命令:

复制代码
openssl x509 -in /etc/letsencrypt/archive/newyingyong.cn/cert1.pem -noout -text

关键输出如下:

复制代码
Authority Information Access:
OCSP - URI:http://ocsp.int-x3.letsencrypt.org
CA Issuers - URI:http://cert.int-x3.letsencrypt.org/
X509v3 Subject Alternative Name:
DNS:*.newyingyong.cn

完美,证书包含了 SAN 扩展,该扩展的值就是 *.newyingyong.cn。

2018-03-13 22:448706

评论

发布
暂无评论
发现更多内容

今天才晓得跟月薪5W的聊过后,才知道自己一直在打杂...

退休的汤姆

Java 面经 社招 Java工程师 秋招

秋招偷偷盘点一下各大互联网公司的实习薪资

退休的汤姆

面经 大厂面试 社招 Java工程师 秋招

RabbitMQ面试29连问,看完还过不了面试,我给你一Jio

小柴说Java

Java 编程 程序员 架构 面试

收藏不迷路 —— Flutter 转场动效大合集

岛上码农

flutter 前端 安卓开发 ios 开发 8月月更

二叉树的递归和迭代实现(java)

秋名山码民

8月月更

惊爆GitHub!腾讯T14级SQL首席专家开源分布式数据库架构实践手册

小柴说Java

Java 编程 程序员 架构 面试

程序员面试太卷?我选择背这份阿里最新Java面试八股文(详解版)

小柴说Java

Java 编程 程序员 架构 面试

基于小程序的小区物业管理平台开发笔记

CC同学

计算机网络(六、应用层)

计算机网络 8月月更

什么是 OpenJ9

HoneyMoose

用户权限-Linux系统基本权限

Albert Edison

Linux centos 运维 用户权限 8月月更

校招失败,在小公司熬了 2 年后我终于进了阿里,竭尽全力(Java 岗)

退休的汤姆

面经 社招 面试技巧 Java工程师 秋招

仿淘宝大流量高并发电商领域核心项目已上线(完整流程+白皮书)

小柴说Java

Java 编程 程序员 架构 面试

秋招最牛的Java面试八股文合集,让我见识到了基础的天花板

退休的汤姆

Java、 面经 社招 Java工程师 秋招

计算机网络(五、运输层)

计算机网络 8月月更

从 Kubernetes 事件中提取价值

玄月九

Kubernetes k8s Event 价值 事件

架构师知识的可迁移性:目标,元素,连接

田晓亮

架构

我凭借这份pdf成功拿到了蚂蚁,京东,小米,腾讯等大厂的offer

小柴说Java

Java 编程 程序员 架构 面试

HTTPS 协议

武师叔

8月月更

应用层

武师叔

8月月更

RxJS Observable 为什么要长成这个样子?!

掘金安东尼

前端 函数式编程 8月月更

双非本科参加了数场面试,并从美团三面中总结出Java面试真题手册

Java面试那些事儿

Java 编程 程序员 架构 面试

外包干了四年,感觉人生就这样了..

退休的汤姆

Java 面经 社招 Java工程师 秋招

他97年的,我既然卷不过他...

退休的汤姆

Java 外包 面经 Java工程师 秋招

信用卡业务数字化专题研究2022H1

易观分析

金融 信用卡

什么是架构思维?

涛哥 数字产品和业务架构

企业架构

[JS真好玩] 掘金创作者必备: 用一行JS查看所有文章的转化率,让你知道什么标题才是好标题

HullQin

CSS JavaScript html 前端 8月月更

连续仨月霸占牛客榜首!京东T8呕心巨作:700页JVM虚拟机实战手册

小柴说Java

Java 编程 程序员 架构 面试

首次公开!阿里巴巴最新高并发架构设计实录被我从Github扒下来了

程序员小毕

Java 程序员 架构 面试 高并发

HTTP 通信

武师叔

8月月更

Python自学教程1-安装pycharm和执行环境

和牛

Python 测试 8月月更

  • 扫码添加小助手
    领取最新资料包
Let's Encrypt 宣布支持通配符证书,所有子域名可轻松开启 HTTPS_语言 & 开发_虞卫东_InfoQ精选文章