向服务商购买一张常见的 DV 通配符 SSL 证书,通常每年的费用在数百到一千多元人民币不等。如果你的域名众多,每年累积的证书费用可能高达数千元。在降本增效的背景下,对于小公司和个人网站而言,如果免费证书能够满足需求,那么选择免费方案无疑能有效节省成本。
Let's Encrypt 是一家免费、开放且自动化的公益性证书颁发机构,由互联网安全研究组运营。它的使命是推动 HTTPS 的广泛应用,通过提供便捷的免费证书服务,致力于构建一个更安全、更尊重隐私的互联网。
操作方法
根据不同的使用环境,Let‘s Encrypt 提供了多种验证和获取证书的方式。官方推荐的常用工具是 Certbot。在一些支持自动化部署的服务器环境或云平台中,你可以配置工具定期自动完成证书的申请和续期,从而大幅减少维护工作量。由于本文所述的服务器环境较为老旧,并且需要将证书上传至阿里云并手动部署到多个服务上,因此采用了“本地生成证书 → 手动上传与更新”的方式。
0x01 在本地生成证书
本文将使用 Docker 容器来运行 Certbot 工具,这是一种快速、隔离的部署方式,非常适合云原生环境或本地测试。生成通配符证书的典型命令如下:
docker run -it --rm --name certbot \
-v '/Users/mazhuang/some/path/letsencrypt:/etc/letsencrypt' \
certbot/certbot certonly \
--preferred-challenges dns \
--manual \
--server https://acme-v02.api.letsencrypt.org/directory \
--key-type rsa --rsa-key-size 2048
命令参数说明:
--preferred-challenges dns:使用 DNS 方式进行域名所有权验证,这是申请通配符证书的必需方式。
--manual:启用交互模式,需要你根据提示手动操作。
--key-type rsa --rsa-key-size 2048:指定生成 RSA 密钥,而非默认的 ECC 密钥,因为部分阿里云服务对 ECC 证书的兼容性支持不足。
执行命令后,程序会依次询问邮箱地址、协议同意项以及域名信息。确认后,它会提示你向域名 DNS 解析中添加一条特定的 TXT 记录来完成验证。根据提示完成操作,等待验证通过即可。
证书成功生成后,文件会保存在你通过 -v 参数挂载的本地目录中,例如 /Users/mazhuang/some/path/letsencrypt/archive/yourdomain.com/。
0x02 上传和部署证书
将上一步生成的证书文件(如 fullchain1.pem 和 privkey1.pem)上传到阿里云的“数字证书管理服务”。上传后,你可以选择使用其一键部署功能(此功能可能需付费),也可以在具体的云产品(如SLB、CDN)的配置中,手动选择已上传的证书进行部署(免费)。
0x03 定期更新证书
Let‘s Encrypt 颁发的证书有效期为 90 天,建议在到期前 30 天内进行更新。更新流程就是重复 步骤 0x01:运行命令生成新证书,然后执行 步骤 0x02 将新证书上传并重新部署到相关服务。为了降低运维负担,强烈建议在条件允许时配置自动化续期脚本。
注意事项
部分极其老旧的系统或平台可能不信任 Let‘s Encrypt 的根证书。在决定使用前,建议评估目标环境的兼容性。
例如,在部署后,一个运行在旧版本 JDK 8(u141 之前)上的 Java 应用(如xxl-job执行器)可能会出现 sun.security.validator.ValidatorException: PKIX path building failed 的错误,导致无法注册或建立SSL连接。
解决方法如下(以Java环境为例):
- 下载根证书:从 Let‘s Encrypt 官网下载其根证书
isrgrootx1.pem。
- 导入信任库:使用
keytool 命令将其导入到 JDK 默认的信任库 cacerts 中。
keytool -trustcacerts -keystore "/opt/jdk/jre/lib/security/cacerts" -storepass changeit -noprompt -importcert -alias lets-encrypt-x1 -file "/opt/isrgrootx1.pem"
- 重启服务:重启你的Java应用服务,使更改生效。
小结
以上步骤清晰简单,且成本为零。对于预算有限的小公司和个人开发者来说,使用 Let‘s Encrypt 获取免费的通配符 SSL 证书,是节省开支的可行方案。如果环境支持,强烈建议实现自动化续期流程,从而将维护成本降至最低。
|