之前我写了一篇,免费申请 HICA 的教程。写完之后有人问我,ACME 还能申请哪些证书呢?于是就有了今天这篇文章。

正文开始

什么是 ACME?

acme.sh是一个轻量级的、高度可自定义的Shell脚本,用于自动化管理和部署Let's Encrypt证书。它可以轻松地在各种操作系统和平台上使用,并提供了丰富的命令行接口和API,方便管理员进行证书的申请、更新和部署。此外,acme.sh还支持多种证书验证方式,包括DNS验证、HTTP验证和TLS-SNI验证等,可以满足不同场景下的证书需求。

CA 支持情况

CA时间(DAY)ECC域数量通配符IPV4IPV6IDN
Let's Encrypt90支持100支持不支持不支持支持
ZeroSSL90支持100支持不支持不支持支持
Google90支持100支持不支持不支持不支持
Buypass180支持5不支持不支持不支持支持
SSL.com90支持2不支持不支持不支持支持
HiCA180不支持10*支持支持支持不支持

HICA 如果是通配符证书,域数量则为 1。

安装&注册 acme.sh

curl https://get.acme.sh | sh -s [email protected] #[email protected] 改为你自己的邮箱地址
acme.sh  --upgrade  --auto-upgrade #开启acme.sh自动更新

申请SSL证书

手动DNS校验

acme.sh --issue \
    -d \*.<域名1.com> \ 
    -d <域名1.com> \
    -d \*.<域名2.com> \
    -d <域名2.com> \
    --days 60

自动DNS校验

此处仅列出大陆常用 DNS 方法,其他 DNS 请前往 acme.sh 文档查看。

DNSPOD

首先需要获取 API KEY。

1

然后将你的 ID 和 Token 保存下来,对应下方的 ID 和 KEY。

export DP_Id="DNSPOD API TOKEN ID"
export DP_Key="DNSPOD API TOKEN KEY"
acme.sh --issue \
    --dns dns_dp \
    -d \*.<域名1.com> \ 
    -d <域名1.com> \
    -d \*.<域名2.com> \
    -d <域名2.com> \
    --days 60

阿里云

前往阿里云申请 AK、SK 即可。也可以使用子账户的方法(更安全),只给予 AliyunDNSFullAccess 权限。

2
2
export Ali_Key="阿里云API KEY"
export Ali_Secret="阿里云API Secret"
acme.sh --issue \
    --dns dns_ali \
    -d \*.<域名1.com> \ 
    -d <域名1.com> \
    -d \*.<域名2.com> \
    -d <域名2.com> \
    --days 60

CloudFlare

首先获取 Global API Key。

export CF_Email="<Cloudflare_Account_Email>"
export CF_Key="<Cloudflare_Global_API_Key>"
acme.sh --issue \
    --dns dns_cf \
    -d \*.<域名1.com> \ 
    -d <域名1.com> \
    -d \*.<域名2.com> \
    -d <域名2.com> \
    --days 60

切换 CA

名称参数
Let's Encryptletsencrypt
Buypassbuypass
SSL.comssl.com
HICAhttps://acme.hi.cn/directory
Google需要前往官方申请API

最新版 acme.sh 工具默认使用 ZeroSSL 作为证书颁发机构,但也支持使用其他 ACME 协议兼容的证书颁发机构。要切换证书颁发机构,您需要在 acme.sh 命令中指定 --server 参数,并将其设置为目标证书颁发机构的 ACME 服务端地址。

案例如下(将 CA 切换为 letsencrypt ):

acme.sh --issue \
    --dns dns_cf \
    --set-default-ca \
    --server letsencrypt \
    --default-ca \
    -d \*.<域名1.com> \ 
    -d <域名1.com> \
    -d \*.<域名2.com> \
    -d <域名2.com> \
    --days 60

在此命令中,--set-default-ca 参数用于设置默认证书颁发机构,--server letsencrypt 参数用于指定 ACME 服务端地址,--default-ca 参数用于使设置生效并保存在配置文件中。

相关问题

IDN 是什么?

在 acme.sh 的文档中,IDN 是 Internationalized Domain Name(国际化域名)的缩写。IDN 是指包含非 ASCII 字符(如中文、日文、韩文等)的域名,这些域名需要经过 Punycode 编码才能在计算机网络中正常使用。acme.sh 工具支持在域名中包含 Punycode 编码后的 IDN,并可以自动为其申请和部署 Let's Encrypt 证书,从而支持在这些域名下启用 HTTPS 安全连接。

申请证书参数中的 days 是什么意思?

在 acme.sh 工具中,-d--days 参数用于设置证书的有效期,即证书将在多少天后过期。例如,使用命令 acme.sh --issue -d example.com -d www.example.com --days 90 将为 example.comwww.example.com 申请有效期为 90 天的证书。

默认情况下,Let's Encrypt 证书的有效期为 90 天。在证书到期前,您可以使用 acme.sh 工具的自动更新功能来自动续期证书,以确保您的网站或应用程序一直使用最新的证书,从而保持 HTTPS 连接的安全性。

acme.sh 会自动续期吗?

是的,acme.sh 工具支持自动续期 Let's Encrypt 证书,以确保您的网站或应用程序一直使用最新的证书,从而保持 HTTPS 连接的安全性。当您使用 acme.sh 工具生成证书时,它会自动在系统上设置一个计划任务(Cron Job),以定期检查证书是否即将过期,如果是,则自动发起续期申请,并更新证书。默认情况下,acme.sh 工具会在证书过期前 30 天进行检查和自动续期,以确保证书始终处于有效期。

所以 days 参数的含义也可以理解为,多少天后尝试自动续期。

网站使用免费 SSL 有什么影响吗?

使用免费 SSL 证书,如 Let's Encrypt,ZeroSSL 等,对网站的影响是正面的,而且是必要的。

  1. 提高安全性:使用 SSL 证书可以加密网站和用户之间的通信,防止黑客窃取或篡改数据,增强网站的安全性,保护用户隐私和数据安全。
  2. 提高可信度:使用 SSL 证书可以让网站获得 "HTTPS" 安全标识,这是现代网站的标志之一,有助于增强用户对网站的信任和可靠性。
  3. 改善 SEO:使用 SSL 证书可以提高网站的搜索引擎排名,因为搜索引擎通常会优先考虑加密网站的搜索结果,从而带来更多的流量和曝光机会。
  4. 降低成本:使用免费 SSL 证书可以降低网站的运营成本,避免购买昂贵的商业 SSL 证书,节省了网站的开支。

需要注意的是,使用免费 SSL 证书可能会存在一些限制和缺点,如证书有效期较短,需要定期续期;支持的功能和证书类型可能有限;受到特定证书颁发机构和浏览器的限制等。因此,选择合适的 SSL 证书和证书颁发机构需要根据实际情况和需求进行评估和选择。