推荐一个完全免费又好用的SSL证书,使用Certbot获取免费SSL证书Let’s Encrypt,支持自动签发部署、支持通配符域名

由于阿里云不再提供免费的SSL证书,提供的免费测试版证书还无法保证稳定性。我就得找一个提供免费证书的公益机构,最终我看上了普及率很高的Let’s Encrypt。该机构提供的DV证书不仅仅完全免费,还支持通配符域名,虽然它提供的证书只有90天的有效期,但它却提供了自动化证书管理功能,解决了频繁更换证书的麻烦。由于该机构的证书只提供命令行界面(CLI)管理证书,本文我就着重介绍一下如何使用Certbot手动申请证书。至于自动申请/续签证书并部署到服务器,需要借助第三方工具或者自己编写脚本实现。

使用Certbot申请Let’s Encrypt证书

Let’s Encrypt 是一家免费、开放、自动化的证书颁发机构,由非营利组织互联网安全研究组(ISRG)运作。建议具有命令行访问权限的人使用 Certbot ACME 客户端来申请证书。

接下来介绍在Windows环境下使用Certbot,若在其他环境下使用,请参考Certbot 官网 。Certbot自从2024年2月不再提供Windows版本的客户端更新,但是我们还可以通过该客户端申请证书。若要实现在服务器上证书的自动续签和部署,可以使用 Certify 证书管理器,该管理器的免费社区版只提供一个服务器上5个域名的管理,若要更多域名签发和服务器部署,就需要付费升级版本。

Windows环境下安装Certbot

  1. 下载Certbot客户端并安装。
  2. “以管理员身份运行”cmd(必须以管理员身份运行,否则会报错)
  3. 将 Certbot 作为 shell 命令运行。要在 Certbot 上运行命令,请在 shell 中输入名称,然后输入命令及其参数。例如,要显示内联帮助,请运行:certbot --help

使用certbot命令申请证书

certbot命令支持使用自定义脚本来完成dns的验证,我们也可以更进一步添加定时计划运行certbot的shell来实现证书的自动签发和部署(该方法在网上有很多)。这里我们只介绍手动验证dns的方式来申请证书。运行下边的命令后会提示让我们添加两条 _acme-challenge txt 记录,我们要添加两条这样的记录(每次添加后等个几分钟,待记录生效后再继续运行命令)。验证成功后会在 C:\Certbot\archive\bluepost.cn 文件夹中生成证书文件,格式为pem。证书的手动续签,是再次运行该命令重新申请即可;自动续签是运行命令 certbot renew

certbot certonly -d "*.bluepost.cn" -d "bluepost.cn" --manual --preferred-challenges dns

参数解释(可以不用关心):

  • certonly:表示采用验证模式,只会获取证书,不会为web服务器配置证书
  • –manual:表示插件
  • –preferred-challenges dns:表示采用DNS验证申请者合法性(是不是域名的管理者)
  • –dry-run:在实际申请/更新证书前进行测试,强烈推荐
  • -d:表示需要为那个域名申请证书,可以有多个。
  • –manual-auth-hook:在执行命令的时候调用一个 hook 文件
  • –manual-cleanup-hook:清除 DNS 添加的记录
  • –email my@qq.com:申请的账号邮箱,首次申请需要添加此选项
使用Certbot获取免费SSL证书Let’s Encrypt

如果你想为多个域名申请通配符证书(合并在一张证书中,也叫做 SAN 通配符证书),直接输入多个 -d 参数即可,比如:

certbot certonly  -d *.example.com -d *.example.net -d www.example.cn  --manual --preferred-challenges dns

【扩展】使用bash以交互式的方式来申请证书

比如我们要申请根域名和二级通配符域名的证书(包含example.com和*.example.com),可以将以下代码保存一个cetbot.sh文件中并运行。

#! /bin/bash
echo -e "\nINFO: 生成 Let's Encrypt 证书"

echo "INFO: 请填写需要签名的域名"
read -p "请输入根域名(不含www),将为根域名aa.com和所有二级域名签名*.aa.com:" domain
if [ -n "$domain" ];then
echo "INFO: 签发域名 $domain"
certbot certonly -d "${domain}" -d "*.${domain}" --manual --preferred-challenges dns
fi

echo "INFO:签发完成"

read -p "Please enter any key to exit" exit_shell

转载请注明:半亩方塘 » 推荐一个完全免费又好用的SSL证书,使用Certbot获取免费SSL证书Let’s Encrypt,支持自动签发部署、支持通配符域名