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