
本文安装教程是在 Ubuntu 系统上进行的操作,如果您是使用的 Windows10 操作系统,可以参考文章 windows下安装linux子系统 来安装 Ubuntu 系统。
网站升级为HTTPS的必要性
- 使用了 https 的网站,浏览器和服务器间的数据传输是加密的,更安全。
- 使用了 https 的网站才能使用 http2(支持多路复用、压缩头信息、请求划分优先级、支持服务器端主动推送等新特性)。
- 2018年1月1日起微信公众号 API 仅支持 https 调用。
- 2018年7月起,Chrome 浏览器的地址栏将把所有 http 网站标识为不安全的网站。
- 搜索引擎对 https 网站评分更高,有利于搜索引擎排名。
…
Let’s Encrypt
网站要支持 https 需要安装证书,而证书是由 CA 机构签发的,大部分传统的 CA 机构(例如:GlobalSign、GeoTrust、Verisign )签发证书一般都是需要按年收费的,价格不菲。很多小公司、创业团队、博客或者个人开发者往往都不是很原因承担这笔费用,这样不利于推动 https 协议的使用。
Let’s Encrypt 是一个免费、开放,自动化的 CA 机构,由 ISRG(Internet Security Research Group)运作。ISRG 是一个关注网络安全的公益组织,其赞助商包括 Mozilla、Akamai、Cisco、EFF、Chrome、IdenTrust、Facebook等公司。ISRG 的目的是消除资金和技术领域的障碍,全面推进网站从HTTP到HTTPS过度的进程。
截至2018年7月底,Let’s Encrypt root(ISRG Root X1)直接受到Microsoft产品的信任。目前受到所有主要root程序的信任,包括Microsoft,Google,Apple,Mozilla,Oracle和Blackberry。
Let’s Encrypt 是一个非盈利性的组织,为了控制开支,他们搞了一个非常有创意的事情,设计了一个 ACME 协议,目前该协议的版本是 v2,也只有升级到 v2 协议才能支持通配符证书。
什么是通配符证书
在没有出现通配符证书之前,Let’s Encrypt 仅支持两种证书:
- 单域名证书:证书仅仅包含一个主机。
- SAN 证书:也称为域名证书,一张证书可以包括多个主机(Let’s Encrypt 限制是 20)。
对于个人用户来说,由于主机并不是太多,所以使用 SAN 证书完全没有问题,但是对于大公司来说有一些问题:
- 子域名非常多,而且过一段时间可能就要使用一个新的主机。
- 注册域也非常多。
对于大企业来说,SAN 证书可能并不能满足需求,而所有的主机全部包含在一张证书中,使用 Let’s Encrypt 证书(限制20)是无法满足的。
通配符证书就是证书中可以包含一个通配符,比如 *.example.com, *.example.cn,用 * 号来自动匹配所有子域名,大型企业也可以使用通配符证书了,一张证书可以放置更多的主机了。
申请 Let’s Encrypt 通配符证书
Let’s Encrypt 对 ACME 协议的实现进行了升级,只有 v2 协议才能支持通配符证书,任何客户端只要支持 ACME v2 版本,就可以申请通配符证书。
官方介绍 Certbot 0.22.0 版本支持新的协议版本
在了解该协议之前有几个注意点:
- 客户在申请 Let’s Encrypt 证书的时候,需要校验域名的所有权,证明操作者有权利为该域名申请证书,目前支持三种验证方式:
- dns-01:给域名添加一个 DNS TXT 记录。
- http-01:在域名对应的 Web 服务器下放置一个 HTTP well-known URL 资源文件。
- tls-sni-01:在域名对应的 Web 服务器下放置一个 HTTPS well-known URL 资源文件。
而申请通配符证书,只能使用 dns-01 的方式
在 Ubuntu 系统下安装 Certbot
首先安装 Certbot。打开官网 https://certbot.eff.org/ ,选择申请证书的使用方式后,就会出现相关的安装命令了。
我当前的 Ubuntu 版本为 Ubuntu 18.04.1 LTS,看到的安装命令为:
$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install certbot
这些命令执行成功后,申请证书的安装工具 certbot 就安装完成了。
我打算给 acme.top 这个域名申请通配符证书,执行命令如下:
$ sudo certbot certonly -d *.acme.top --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory
相关参数释义:
- certonly,表示安装模式,Certbot 有安装模式和验证模式两种类型的插件。
- –manual 表示手动安装插件,Certbot 有很多插件,不同的插件都可以申请证书,用户可以根据需要自行选择。
- -d 为那些主机申请证书,如果是通配符,输入 *.acme.top(可以替换为你自己的域名)。
- –preferred-challenges dns,使用 DNS 方式校验域名所有权。
- –server,Let’s Encrypt ACME v2 版本使用的服务器不同于 v1 版本,需要显示指定。
命令执行后输出如下图:
上图交互中有两个交互的提示:
- 是否同意 Let’s Encrypt 协议要求
- 询问是否对域名和机器(IP)进行绑定
确认同意后才能继续,同意后要求配置 DNS TXT 记录,也就是验证域名的所有权,判断证书申请者是否有域名的所有权。
上面输出要求给 _acme-challenge.acme.top
配置一条 TXT 记录,在没有确认 TXT 记录生效前不要按回车执行。
否则会验证失败如下图:
我使用的是阿里云的域名服务器,登录控制台配置如下图:
然后打开一个新的终端输入下面的命令来确认 DNS 解析是否生效:
dig -t txt _acme-challenge.acme.top
输出结果如下则表示 DNS 记录已经生效了
然后回到上一个终端中敲回车键执行,输出如下图,则表示证书生成成功:
输出中表示把相关证书保存在了 /etc/letsencrypt/live/acme.top/
这个目录下,生成的文件如下图:
至此,申请通配符证书就完成了。
本文作者: 行风
本文链接: https://acme.top/apply-lets-encrypt-cert
版权声明: 本站文章欢迎链接分享,禁止全文转载!
发表评论
沙发空缺中,还不快抢~