Linux SSL证书自动更新管理
前言
对于网站而言,SSL加密非常重要,不仅可以加强网站的安全性,而且还能提高网站的SEO,浏览器不会提示用户站点是非安全的。
acme.sh 实现了 acme
协议, 可以从 letsencrypt 生成免费的证书.
GitHub项目地址:
一、通过 Certbot 自动更新证书
Certbot 是一个免费的开源软件工具,用于在手动管理的网站上自动使用Let's Encrypt证书以启用 HTTPS。
1、CentOS 8 安装 SNAP
2、CentOS 7 安装 SNAP
2.1 通过添加epel
存储库并安装copr yum
插件开始安装。
epel
存储库并安装copr yum
插件开始安装。2.2 添加仓库
2.3 添加存储库后,安装snapcore
包。
snapcore
包。2.4 安装完成,启用snapd socket
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 -v
查看当前版本。acme.sh
3.x版本默认使用Let’s Encrypt作为服务提供商,我们可以通过以下命令,将其更换为ZeroSSL:
3、输入 acme.sh --help
即可查看 acme.sh 的帮助命令
acme.sh --help
即可查看 acme.sh 的帮助命令三、申请证书
1、通过 HTTP 方式申请证书
只需要指定域名, 并指定域名所在的网站根目录. acme.sh 会全自动的生成验证文件, 并放到网站的根目录, 然后自动完成验证. 最后会删除验证文件. 整个过程没有任何副作用.
/etc/nginx/conf.d/ssl/
为 zhiqiang.cloud
站点下的证书请求目录。
如果没有安装 web 服务器,acme.sh 也自带一个建议的web服务用于证书申请,前提是需要安装 socat ,80端口没有被占用。使用方法:acme.sh --issue -d zhiqiang,cloud --standalone
2、通过 DNS 方式申请证书
优点:不需要任何服务器,不需要任何公网 IP,只需要 DNS 的解析记录即可完成验证,而且可申请泛域名证书。
缺点:需要配合DNS解析服务商的API使用,否则 acme.sh 将无法自动更新证书,每次都需要手动再次重新解析验证域名所有权。
SSL证书验证可通过DNS验证、文件验证等多种方式,为了方便多个域名申请以及后续证书更新,推荐使用DNS API方式,不过在使用前需要先进行设置。
阿里云 DNS 申请方式
1、打开 https://usercenter.console.aliyun.com/#/manage/ak ,获取 AccessKey ID
和 AccessKey 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官网在线申请SSL证书,免费账户是有3个域的额度限制的,但通过acme.sh
申请则没有这个限制,所以建议使用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
目录,前提是需要创建相关目录。
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
vim ~/.acme.sh/auto-udate-ca.sh
3、配置每3个月更新一次 vim /etc/crontab
vim /etc/crontab
十、acme升级
目前由于 acme 协议和 Let`s CA 都在频繁的更新, 因此 acme.sh 也经常更新以保持同步.
升级 acme.sh 到最新版 :
如果你不想手动升级, 可以开启自动升级:
之后, acme.sh 就会自动保持更新了.
你也可以随时关闭自动更新:
十一、故障排查
错误一:
解决方案:
查询libssl.so
模块版本
1. 新增 repo 源
内容为:
2. 更新 curl
其它出错, 请添加 debug log
:
或者:
请参考:
本文并非完全的使用说明, 还有很多高级的功能, 更高级的用法请参看其他 wiki 页面.
最后更新于