当前位置:首页 > 群晖专栏 > 运维部署 > 正文内容

自动化部署证书 acme.sh 详细实践使用教程

admin5年前 (2020-03-06)运维部署292

前言

博主之前一直是使用手动的方式去申请和续签Let's Encrypt泛域名SSL证书.最近为了更方便的自动化部署,详细研究使用了acme.sh这个项目,并成功自动申请了多个域名证书.同时该项目还能够自动续签证书,自动安装证书,支持广泛的环境和场景的部署,功能非常强大.


部署简介

域名证书的申请其实非常简单,只需证明域名的所有权,证书颁发机构即可为你颁发免费的证书文件.整个流程用户最繁琐的步骤就是验证域名的所有权,一般可分为httpDNS两种.http方式是将随机生成的验证文件放入网站的根目录,由机构扫描验证.而DNS方式则是将随机生成的验证码创建域名的TXT记录由机构扫描验证.验证通过即可颁发证书.

acme.sh 可以帮用户简化所有权验证的步骤.根据用户提供的Web 路径或者域名 DNS 的API,来自动为用户创建验证文件或验证 TXT 记录.并将颁发的证书部署到指定的环境,同时支持到期续签以保持域名有效期.

整个部署流程非常简单,具体为以下三个步骤:

  • 准备 DNS API

  • 安装 acme.sh

  • 执行申请部署命令


本文以最常规的 DNS API 验证模式并自动部署到 nginx 环境为例,其他方式请参考官方Wiki.

准备 DNS API

通过使用域名服务商提供的 API 密钥,让acme.sh自动创建域名验证记录以申请域名证书. acme.sh 支持全球各种域名服务商的 API ,本文将以阿里云,腾讯云,Cloudflare为例.更多 DNS API 支持,请查看:官方dnsapi

阿里云


推荐使用子账户,并赋予子账户 DNS 权限,以确保安全性.

登陆阿里云控制台 - 访问控制 RAM - 用户管理
新建用户并勾选为该用户自动生成AccessKey

复制保存好生成的AccessKey信息

授权该用户,搜索DNS,并将AliyunDNSFullAccess移动至右侧确定.

根据官方dnsapi获取阿里云的API格式为:

export Ali_Key="LTAI4Fd8J9qs4fxxxxxxxxxx"
export Ali_Secret="Xp3Z7NDOW0CJcPLKoUwqxxxxxxxxxx"

腾讯云

腾讯云的域名由dnspod.cn管理,登陆管理控制台,右上角选择密钥管理,创建密钥并复制保存好生成的IDToken.

根据官方dnsapi获取DNSPod.cnAPI格式为:

export DP_Id="124xxx"
export DP_Key="54ddaa41245837600ce713xxxxxxxxxx"

Cloudflare


Cloudflare 的 API 分为 global api key 全局 API 和创建 new api token ,网上各种教程都是使用全局 API .为确保安全,推荐创建 new api token 来使用.

登陆 Cloudflare 点域名进入,右侧有如下图 API 信息.首先复制保存Account ID.然后点击Get your API token.

点击Create Token创建新 API Token,具体参考如下:

其中 Zone Resources 选择你的 Cloudflare 账户邮箱

复制保存生成的API Token

根据官方dnsapi获取CloudFlareUsing the new cloudflare api token格式为:

export CF_Token="PfCA6tyLxxxxxxxx-sS6ANgqzuVexxxxxxx"
export CF_Account_ID="1fs48ec7e2063cb70hacc3xxxxxxxxxx"

一键脚本部署

安装脚本

登陆 VPS 服务器使用官方一键安装脚本安装acme.sh

wget -O -  https://get.acme.sh | sh

配置 DNS API

acme.sh 程序目录为隐藏目录.acme.sh存放在root下.执行以下命令进入目录,并编辑account.conf,根据上文获取的 API 格式,复制粘贴到文件中保存.

cd ~/.acme.sh
vi account.conf


注意目前 account.conf 仅支持一个 DNS API ,多个域名服务商的域名需单独加 --accountconf 参数: 相关 issues 链接

申请证书

自动 DNS 模式标准命令:

acme.sh --issue --server letsencrypt --dns dns_dp -d example.com -d www.example.com

其中dns_dp为 腾讯云DNSPod.cn 服务商,自行根据官方dnsapi修改.例如:dns_ali阿里云,dns_cfCLoudflare.

以本站域名ioiox.com为例,申请泛域名证书.执行以下命令:

acme.sh --issue --server letsencrypt --dns dns_dp -d ioiox.com -d *.ioiox.com
多域名申请证书会将多个证书合并为一个证书,并存放到以第一个域名命名的文件夹内,证书信息仅显示第一个域名的信息.

自动部署

acme.sh 还支持自动部署证书到指定目录并重启nginxapache服务,以确保新证书生效.官方参考如下:

acme.sh --installcert -d example.com \
--key-file       /path/to/keyfile/in/nginx/key.pem  \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd     "service nginx force-reload"

博主的服务器使用的是军哥 LNMP环境,其中证书路径为/usr/local/nginx/conf/ssl,重载命令为nginx -s reload.参考命令为:

acme.sh --installcert -d ioiox.com \
--key-file /usr/local/nginx/conf/ssl/ioiox.com.key \
--fullchain-file /usr/local/nginx/conf/ssl/ioiox.com.cer \
--reloadcmd     "nginx -s reload"

更多环境部署直接参考官方文档的参数配置.

自动续签证书

由于 Let's Encrypt 的证书有效期为三个月.为避免证书失效 acme.sh 会每60天根据你的历史申请记录和部署记录重新续签证书并部署.


docker 部署

作为忠实的docker fans,推荐使用 docker 容器部署,支持以下两种方式:

  • docker executable 执行模式

  • docker daemon 守护模式

docker executable 执行模式


docker executable 执行模式 acme.sh 容器无需常驻运行,执行 docker run 命令申请证书.并自动删除容器.

手动创建~/acme.sh目录,并创建account.conf文件,粘贴 API 信息.执行以下命令:

docker run --rm -it \
  -v ~/acme.sh:/acme.sh \
  neilpang/acme.sh --issue --server letsencrypt --dns dns_dp \
  -d aaa.com \
  -d *.aaa.com \
  -d bbb.com \
  -d *.bbb.com \
  -d ccc.com \
  -d *.ccc.com
由于 Let's Encrypt 的政策经常更新,请及时更新 acme.sh 镜像, docker executable 执行模式 请在执行前手动 docker pull 更新镜像.

docker daemon 守护模式


docker daemon 守护模式 acme.sh 容器将常驻运行,执行 docker exec 命令申请证书.

守护模式启动命令,将DNS API 配置文件证书文件挂载到root目录下的acme.sh中.

docker run -itd  \
  -v ~/acme.sh:/acme.sh  \
  --net=host \
  --name=acme.sh \
  --restart=always \
  neilpang/acme.sh daemon

进入~/acme.sh目录,手动创建account.conf文件并粘贴 API 信息.执行以下命令申请证书:

docker exec acme.sh --issue --server letsencrypt --dns dns_dp \
  -d aaa.com \
  -d *.aaa.com \
  -d bbb.com \
  -d *.bbb.com \
  -d ccc.com \
  -d *.ccc.com
由于 Let's Encrypt 的政策经常更新,请及时更新 acme.sh 镜像, docker daemon 守护模式 可以搭配之前推荐的 Watchtower 来实时更新容器镜像.

结语

生成的证书文件务必使用含有完整证书链的fullchain.cer域名.key来部署,避免因证书不完整出现的错误.博主就是因为出现过几次证书问题才决心研究使用此方案.以上即是博主近期使用的经历,分享给大家以供参考.当然 acme.sh 还有很多的玩法请参考官方项目:


本站提供免费和付费的技术支持.你可以通过留言,邮件,QQ的方式来进行技术交流和免费咨询.同时也可以付费支持的方式获得相关的技术支持,项目部署配置等服务.具体相关详情请点击查看 技术支持页面


扫描二维码推送至手机访问。

版权声明:本文由梦魁网络资源站发布,如需转载请注明出处。

本文链接:https://family.monkui.com:39/?id=201

标签: 运维部署
分享给朋友:

相关文章

宝塔面板设置Typecho伪静态去掉index.php教程

宝塔面板设置Typecho伪静态去掉index.php教程

前言Typecho博客初始安装完成后,博客的任何内页面,地址栏都会有index.php(例如https://www.ioiox.com/index.php/archives/about.html)非常影响美观和网站结构,本文将详解在宝塔面板...

Nginx设置Typecho伪静态去掉index.php教程

Nginx设置Typecho伪静态去掉index.php教程

前言Typecho博客初始安装完成后,博客的任何内页面,地址栏都会有index.php(例如https://www.ioiox.com/index.php/archives/about.html)非常影响美观和网站结构,本文将详解在Ngin...

OneDrive多网盘文件浏览系统PyOne安装配置教程

OneDrive多网盘文件浏览系统PyOne安装配置教程

前言本文将详细介绍OneDrive多网盘文件浏览系统PyOne的安装流程PyOne是一款基于Python-Flask的onedrive文件本地化浏览系统,使用MongoDB储存文件列表,使用redis缓存数据,支持绑定多个网盘,极大的提高使...

国外 Linux VPS 去程回程线路路由查询教程

国外 Linux VPS 去程回程线路路由查询教程

前言每年双11,12,黑五都是VPS各种打折的季节,我也趁这段时间研究了一下国外VPS的相关知识.国外VPS的首要指标就是要速度快,那么如何判断本地与VPS之间的线路好坏,本文将介绍使用软件和命令来查询去程回程的线路路由命令.如何通过查询路...

Watchtower - 自动更新 Docker 镜像与容器

Watchtower - 自动更新 Docker 镜像与容器

前言在早前部署Awesome TTRSS时,作者在docker-compose里配置了Watchtower,于是找到 Github 官方项目研究了下,根据官方文档简单整理了一下常用参数以备用.Watchtower 是一款实现自动化...

Docker Compose 部署监控系统 Prometheus + Grafana + Node Exporter + Cadvisor

Docker Compose 部署监控系统 Prometheus + Grafana + Node Exporter + Cadvisor

前言Prometheus + Grafana + Node Exporter + Cadvisor是一款开源的服务器系统状态监控平台系统,用于管理和存储各服务器的实时信息数据,方便监控和排查服务器故障.博主经过一段时间的安装,配置,测试也基...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。