网站 如果不使用 SSL 加密传输,浏览器都会提示连接是不安全的,就会给人很 low 的感觉。免费的证书机构 Let’s Encrypt 签发的证书恰好可以解决这个问题,使用其提供的免费证书,就可以让网站支持 HTTPS。

Let’s Encrypt 签发的证书有效期都比较短,只有90天,证书到期后需要续签,否则浏览网站时会提示证书因到期而失效。如果一个域名下多个二级域名都使用了 Let’s Encrypt  证书,每个域名都签发续签,就比较麻烦了。这时候就可以试一下泛域名的通配符证书了。

泛域名是指在域名解析时可以使用”*”号作为通配符,可以将域名对应的多个二级域名都解析到泛域名指定的 IP 地址。例如”*.rultr.com”解析到的 IP 是 1.1.1.1 ,那么”www.rultr.com”、”test.rultr.com”等多个域名都可以解析到 1.1.1.1 。作为与之对应的通配符证书,则是指该证书可以供该域名下的多个二级域名使用,即如果有一个”*.rultr.com”的通配符证书,既可以给”www.rultr.com”使用,也可以给”test.rultr.com”使用,这就大大方便了证书的签发和使用。

Let’s Encrypt 上的证书申请是通过 ACME 协议来完成的。ACME 协议规范化了证书申请、更新、撤销等流程,实现了 Let’s Encrypt CA 自动化操作。解决了传统的 CA 机构是人工手动处理证书申请、证书更新、证书撤销的效率和成本问题。

ACME v2 是 ACME 协议的更新版本,通配符证书只能通过 ACME v2 获得。要使用 ACME v2 协议申请通配符证书,只需一个支持该协议的客户端就可以了,官方推荐的客户端是 Certbot。

1] 获取 Certbot 客户端

Certbot 客户端在主要的 Linux 发行版上都可以获取,直接使用包管理工具安装即可:

# yum install certbot         //RHEL  
OR
# apt install certbot         //Debian

安装成功以后,使用如下命令查看一下 Certbot 版本,因为只有 0.22.0 以上版本的 Certbot 才支持 ACME v2 协议,低于这个版本的 Certbot 如果想使用通配符证书,则需要将客户端升级至要求版本:

# certbot --version

图.1 查看 Certbot 版本

可以看到,主机的 Certbot 客户端符合通配符域名证书要求。

2] 申请通配符证书

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

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

需要注意的是,申请通配符证书,只能使用 dns-01 的方式。

申请通配符证书,只需要一条命令,以本站的通配符证书”*.rultr.com”为例,命令如下:

# certbot certonly -d *.rultr.com --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory

命令参数说明如下:

  • certonly:指本次用于申请证书
  • -d:用于指定需要申请证书的域名,通配符证书采用此种方法
  • –manual:表示手动生成证书
  • –prefrred-challenges:表示采用dns-01方式验证域名
  • –server:由于acme v2使用的单独的服务器,所以在命令中特别指定

命令执行后,会出现如下提示:

图.2 使用dns-01方式申请通配符证书

之后,certbot 工具要求对域名进行验证,需要在域名”rultr.com”下添加一条 txt 记录”_acme-challenge”,记录值为”zkkHBfrWRG8yghiF8Z1Ob9Tyu_sKGIxAxGZ2BupyCP4″。

现在,去域名服务商的管理界面,根据提示,为”rultr.com”添加相应记录。注意在这条解析生效前,继续执行命令都不会成功申请证书,所以可以使用如下命令检查解析是否生效:

# dig -t txt _acme-challenge.rultr.com

由于解析生效时间有长有短,可以多次尝试或多等一段时间。好在每台主机申请通配符证书要求验证的”txt”记录值都一样,所以可以等解析完后生效后,再次执行申请命令即可。DNS 记录验证成功,会出现如下提示表示通配符证书申请成功:

图.3 申请通配符证书成功

命令执行成功后,生成的证书保存在”/etc/letsencrypt/live/rultr.com/”目录里,可以供 Web 服务器使用了。

3] 配置使用通配符证书

证书申请成功后,只需要修改 Web 服务器的配置,在 ssl 配置中使用通配符证书即可。以 nginx 为例,只需要修改如下配置项:

ssl_certificate      /etc/letsencrypt/live/www.rultr.com/fullchain.pem;
ssl_certificate_key  /etc/letsencrypt/live/www.rultr.com/privkey.pem;

由于我在主域名中设置了跳转,访问主域名时会自动跳转至”www”二级域名,如果 Web 服务器侦听的是主域名,则需要自行设置,但不是通配符证书的内容了。

Web 服务器配置修改完成后,重新启动使通配符证书生效。

通过浏览器检查网站的证书,就会发现此时已经使用了通配符证书:

图.4 检查网站通配符证书信息

之后,其他的二级域名网站都可以使用这个通配符证书了,这样既方便管理更新,看起来又高大上,非常适合一台服务器跑多个网站的情况。有兴趣的小伙伴不妨试试。

发表评论

您的电子邮箱地址不会被公开。