Linux SSL证书自动更新管理

博客作者:联系请点击,搬运不易,希望请作者喝咖啡,可以点击联系博客作者

前言

对于网站而言,SSL加密非常重要,不仅可以加强网站的安全性,而且还能提高网站的SEO,浏览器不会提示用户站点是非安全的。

acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书.

GitHub项目地址:

FreeBSD MacOS Ubuntu Windows Solaris

Shellcheck PebbleStrict DockerHub

Join the chat at https://gitter.im/acme-sh/Lobby Docker stars Docker pulls

一、通过 Certbot 自动更新证书

1、CentOS 8 安装 SNAP

2、CentOS 7 安装 SNAP

2.1 通过添加epel存储库并安装copr yum插件开始安装。

2.2 添加仓库

2.3 添加存储库后,安装snapcore包。

2.4 安装完成,启用snapd socket

2.5 查询帮助页面

3、更新 SNAP 到最新版本

4、使用 SNAP 安装 Certbot

5、建立 Certbot 的软连接

6、使用 Certbot获取SSL证书,可以指定 –apache 或者 –nginx, 这两个是最常用的选项,这里使用 Nginx。

创建过程中会询问一些基础的问题,比如说 email、域名等。

7、使用 Certbot 进行自动更新

二、通过 acme.sh 自动更新证书

1、CentOS 终端下执行:

案例

说明:

  • --home是一个自定义的安装目录acme.sh。默认情况下,它安装到~/.acme.sh

  • -m,--email 指定账户邮箱,只对'--install'和'--update-account'命令有效。

  • --config-home是一个可写文件夹,acme.sh 将在那里写入所有文件(包括证书/密钥、配置),默认情况下,它在--home

  • --cert-home是一个自定义目录,用于保存您颁发的证书,默认情况下,它保存在--config-home.

  • --accountemail 是用于注册 Let's Encrypt 帐户的电子邮件,您将在此处收到续订通知电子邮件。

  • --accountkey是保存您帐户私钥的文件。默认情况下,它保存在--config-home.

  • --user-agent 是用于发送到 Let's Encrypt 的用户代理标头值。

2、安装完成后,可输入acme.sh -v查看当前版本。

acme.sh 3.x版本默认使用Let’s Encrypt作为服务提供商,我们可以通过以下命令,将其更换为ZeroSSL:

3、输入 acme.sh --help 即可查看 acme.sh 的帮助命令

三、申请证书

1、通过 HTTP 方式申请证书

只需要指定域名, 并指定域名所在的网站根目录. acme.sh 会全自动的生成验证文件, 并放到网站的根目录, 然后自动完成验证. 最后会删除验证文件. 整个过程没有任何副作用.

2、通过 DNS 方式申请证书

  • 优点:不需要任何服务器,不需要任何公网 IP,只需要 DNS 的解析记录即可完成验证,而且可申请泛域名证书。

  • 缺点:需要配合DNS解析服务商的API使用,否则 acme.sh 将无法自动更新证书,每次都需要手动再次重新解析验证域名所有权。

阿里云 DNS 申请方式

1、打开 https://usercenter.console.aliyun.com/#/manage/ak ,获取 AccessKey IDAccessKey Secret

2、配置环境变量

3、申请证书

申请证书后, key 和 秘钥会被 明文 保存在 ~/.acme.sh/account.conf , 请妥善保管

如果需要重新申请证书: 请删除掉该目录下内容 rm -rf /root/.acme.sh/zhiqiang.cloud/*

腾讯云 DNSPod 申请方式

1、Token可通过:https://console.dnspod.cn/account/token/token# 获取。

  • DP_Id=” ”中请填写您的ID

  • DP_Key=” ”中请填写Token

华为云 DNS 申请方式

  • HUAWEICLOUD_Username:华为云用户名

  • HUAWEICLOUD_Password:华为云密码

  • HUAWEICLOUD_ProjectID:可通过我的凭据获取

目前支持 DNSPod、CloudXNS、Aliyun、jdcloud、 CloudFlare、 GoDaddy、 Azure、AWS 等国内外大多数主流DNS服务提供商。

查看更多DNS API 使用方式, 请查看 https://github.com/acmesh-official/acme.sh/wiki/dnsapi

四、ZeroSSL使用说明

申请证书之前,建议先在ZeroSSL官方网站:https://zerossl.com/注册账号,方便与acme.sh申请的证书进行绑定于关联。

1、申请ZeroSSL泛域名SSL证书

首次使用需要先注册ZeroSSL账户(参考上一步),如果已经注册,下面的命令会自动关联账户,命令如下(myemail@example.com改成你自己的ZeroSSL邮箱,不要乱填):

zhiqiang.cloud域名为例,该域名使用DNSPod解析,我已经在上一个步骤中设置好DNSPod解析DNS API,现在可以输入命令直接申请:

2、多域名证书

acme.sh 可以同时申请多个域名.例如拥有域名aaa.com,bbb.com,ccc.com,只需要在命令后加上-d 空格 域名即可

例如:

五、自动部署

如果申请过程中没有报错,就可以将SSL证书拷贝到任何想要的位置进行使用,命令如下:

上述命令将zhiqiang.cloud SSL证书导出到了/data/ssl目录,前提是需要创建相关目录。

六、手动拷贝证书

1、查询域名生成的证书路径.

2、拷贝到 Nginx 目录.

仅供参考,请根据具体的域名进行替换

七、配置证书.

以 CentOS 环境为例, 其他环境未测试,但是应该比较类似.

1、新建Nginx配置文件

2、写入以下内容

3、检测Nginx语法

4、启动Nginx进行验证

八、验证证书配置成功.

打开浏览器 https://zhiqiang.cloud/ 验证 HTTPS 证书

九、自动更新证书

ZeroSSL 的证书有效期为60天

目前手动添加DNS获取证书的方式无法自动更新,但是使用DNS API的方式进行获取证书可以在 60 天以后会自动更新, 你无需任何操作.

1、强制执行更新任务

2、编写自动配置脚本 vim ~/.acme.sh/auto-udate-ca.sh

3、配置每3个月更新一次 vim /etc/crontab

十、acme升级

目前由于 acme 协议和 Let`s CA 都在频繁的更新, 因此 acme.sh 也经常更新以保持同步.

升级 acme.sh 到最新版 :

如果你不想手动升级, 可以开启自动升级:

之后, acme.sh 就会自动保持更新了.

你也可以随时关闭自动更新:

十一、故障排查

错误一:

解决方案:

查询libssl.so 模块版本

1. 新增 repo 源

内容为:

2. 更新 curl

其它出错, 请添加 debug log

或者:

请参考:

本文并非完全的使用说明, 还有很多高级的功能, 更高级的用法请参看其他 wiki 页面.

最后更新于

这有帮助吗?