前言

在之前的博文《为 Nginx 服务器配置 SSL 证书启用 HTTPS 连接》中介绍过如何在阿里云申请免费的 SSL 证书。在阿里云申请证书的优势是快捷方便,只需要动动手指填写基本信息即可,申请下来的证书也有长达一年的有效期。但是,每个用户在阿里云一年只有 20 个免费证书申请额度,并且也不支持证书自动续签,当证书过期了,就需要回到阿里云上手动重新申请,然后登录服务器将旧证书替换成新证书。

通过 ACME 申请 SSL 证书虽然不像在阿里云点点鼠标就完事,但其实也很简单,并且证书数量没有额度限制,同时能够通过自动更新任务实现证书的自动续签,一劳永逸。

Automatic Certificate Management Environment(ACME)是一个由互联网工程任务组(IETF)制定的标准协议,旨在简化TLS/SSL证书的自动化管理过程。ACME协议主要用于网站所有者能够自动化地从支持该协议的证书颁发机构(如Let's Encrypt)那里获取和管理HTTPS证书。

ACME协议的关键特性:

  • 自动化处理:ACME允许服务器软件或其他工具自动与证书颁发机构进行交互,从而完成证书的申请、验证、签发和续期等全流程操作,无需人工干预。

  • 域名验证:ACME包含一套机制来验证用户对特定域名的所有权。这通常通过DNS记录、HTTP或者TLS ALPN等方式进行验证。

  • API驱动:ACME协议基于RESTful API设计,客户端可以通过HTTP请求与CA通信,执行各种证书生命周期管理任务。

  • 安全性:协议确保整个过程的安全性,包括使用JSON Web Signature (JWS) 和 JSON Web Encryption (JWE) 进行加密签名通信。

  • 开放标准:作为IETF的标准协议,任何符合ACME规范的客户端软件都能够与支持该协议的CA协同工作,从而促进了HTTPS部署的标准化和普及化。

ACME协议极大地降低了HTTPS加密部署的技术门槛和成本,使得广大网站能够方便快捷地获得免费且受信任的SSL/TLS证书,并能保持证书的有效性和更新。

一、安装依赖

yum install socat -y
yum install vixie-cron
yum install crontabs
yum install openssl

二、获取 ACME 脚本

curl https://get.acme.sh | sh

三、应用 ACME 自动配置的环境

source ~/.bashrc

四、注册账号

替换 your@mail.com 为你的邮箱

acme.sh --register-account -m you@mail.com

五、申请证书

替换 www.xxx.com 为你的域名

acme.sh --issue -d www.xxx.com --standalone

若默认 CA 申请出错或排队无法下发,可切换其他 CA:

  • Let’s Encrypt:

    acme.sh --set-default-ca --server letsencrypt
    
  • Buypass:

    acme.sh --set-default-ca --server buypass
    
  • ZeroSSL:

    acme.sh --set-default-ca --server zerossl
    

六、安装证书

替换三处 www.xxx.com 为你的域名,路径自选

acme.sh --installcert -d www.xxx.com --key-file /root/www.xxx.com.key --fullchain-file /root/www.xxx.com.crt

七、查看申请的证书列表

acme.sh --list

八、检查是否添加了自动更新任务

crontab -e

九、配置 ACME 脚本更新

自动更新:

acme.sh --upgrade --auto-upgrade

手动更新:

acme.sh --upgrade

十、删除证书

acme.sh remove Main_Domain