使用Certbot生成免费TLS泛域名证书部署HTTPS
一、简介:
在理论上,我们可以使用OpenSSL自己当证书授权中心( CA ),为自己的域名制作域名证书,实现物理链路TLS加密传输。优点是免费且可控,但是缺点也很明显,浏览器为了防止中间人攻击,会对证书授权中心( CA )机构做出严格的限制,但是客户端并不知道你自己生成的这个CA机构,TLS握手时就会视为网络被劫持,从而直接关闭连接。目前主流受信任的证书授权中心( CA )签发泛服务都需要付费,且价颇为昂贵,不过为了加快推广 https 的普及, EEF 电子前哨基金会、 Mozilla 基金会和美国密歇根大学成立了一个公益组织叫 ISRG ( Internet Security Research Group ),这个组织从 2015 年开始推出了 Let’s Encrypt 免费证书。这个免费证书不仅免费,而且还相当好用,所以我们就可以利用 Let’s Encrypt 提供的免费证书部署 HTTPS 了。
二、准备工作
我就以 Ubuntu 22.04 作为环境,本文章会一步一步介绍如何使用 Certbot 让 ISRG 组织为自己的域名签发 TLS 泛域名证书。
首先,我们需要安装 Certbot :
# sudo apt update
# sudo apt install certbot -y
我先解释一下,sudo apt update 这个命令就是刷新 Ubuntu 自带的 apt 包管理器软件列表。sudo apt install certbot 命令就是安装 certbot 工具,-y 就是默认同意,让 apt 包管理器不再进行过多的提示。
安装完成后我们可以运行以下命令检查 Certbot 是否安装成功。
# certbot --versio
如果正常输出 Certbot 版本号,则视为安装成功。
三、签发证书
安装完成后使用一下命令使用 Certbot 签发证书:
certbot certonly --preferred-challenges dns --manual -d *.xxxxxx.com --server https://acme-v02.api.letsencrypt.org/directory
我稍微解释一下这些参数作用:
--preferred-challenges dns:认证方式选择 DNS ,泛域名支持 DNS ;
--manual:手动验证模式;
-d *.xxxxxx.com:就是要申请的泛域名的域名了;
--server https://acme-v02.api.letsencrypt.org/directory:因为申请泛域名证书是新功能,如果需要签发泛域名证书就需要加上这个参数。
运行使用 DNS 验证域名的命令后,会有以下提示:
生成时根据提示,将红框内需要添加的TXT解析记录在你的域名DNS服务提供商那里加入对应的TXT记录:
加入过后,可通过些命令查看是否解析成功:
1、Windows:
nslookup -qt=TXT _acme-challenge.xxxxxx.com
2、Linux:
nslookup
set querytype=TXT
_acme-challenge.xxxxxx.com
Tip:在签发证书前,建议先关闭域名的 CDN 加速功能。
当有以下提示是证明证书签发成功:
四、注意事项
证书有效期为3个月左右,到期需要手动续期,可以使用以下命令手动续期证书:
certbot renew
不建议频繁使用 Cerbot 为一个域名签发证书,过于频繁的签发新的整数会导致 ISRG 拒签证书,免费的东西虽好,但是也不把羊薅秃了,秃了就没得薅了。