acme实现自动更新网站SSL证书
使用 acme 协议来实现自动更新 SSl 证书
一、安装acme
1.安装 acme
,使用官网提供
2.自定义高级安装
- --home #是要安装的自定义目录acme.sh。默认情况下,它安装到~/.acme.sh
- --config-home #是一个可写文件夹,acme.sh将在其中写入所有文件(包括cert / keys,configs)。默认情况下--home
- --cert-home #是自定义的目录,用于保存您颁发的证书。默认情况下,它保存在中--config-home。
- --accountemail #是用于向Let's Encrypt注册帐户的电子邮件,您将在此处收到续订通知电子邮件。默认为空。
- --accountkey #是保存您的帐户私钥的文件。默认情况下,它保存在中--config-home。
- --useragent #是用于发送到“让我们加密”的用户代理标头值。
2.创建自定义命令方便使用
设置永久生效,在对应登录用户下编辑 bashrc 文件
3.会自动创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书.
如果想看执行是否有报错,可以修改输出
安装过程不会污染已有的系统任何功能和文件, 所有的修改都限制在安装目录中: ~/.acme.sh/
二、生成证书
acme.sh
实现了 acme
协议支持的所有验证协议. 一般有两种方式验证: http
和 dns
验证.
1.手动 dns
方式, 手动在域名上添加一条 txt
解析记录, 验证域名所有权.
然后, acme.sh 会生成相应的解析记录显示出来, 你只需要在你的域名管理面板中添加这条 txt 记录即可
等待解析完成之后, 重新生成证书:
这种方式的好处是, 你不需要任何服务器, 不需要任何公网 ip
, 只需要 dns
的解析记录即可完成验证. 坏处是,如果不同时配置 Automatic DNS API
,使用这种方式 acme.sh
将无法自动更新证书,每次都需要手动再次重新解析验证域名所有权。
使用阿里api
来生成证书
使用腾讯云api
来生成证书
将api
账号密钥存入配置文件
2.http
方式需要在你的网站根目录下放置一个文件, 来验证你的域名所有权,完成验证. 然后就可以生成证书了.
成功的话有以下信息输出
只需要指定域名, 并指定域名所在的网站根目录. acme.sh 会全自动的生成验证文件, 并放到网站的根目录, 然后自动完成验证. 最后会聪明的删除验证文件. 整个过程没有任何副作用.
如果你用的 apache
服务器, acme.sh
还可以智能的从 apache
的配置中自动完成验证, 你不需要指定网站根目录:
如果你用的 nginx服务器, 或者反代, acme.sh 还可以智能的从 nginx的配置中自动完成验证, 你不需要指定网站根目录:
注意, 无论是 apache 还是 nginx 模式, acme.sh在完成验证之后, 会恢复到之前的状态, 都不会私自更改你本身的配置. 好处是你不用担心配置被搞坏, 也有一个缺点, 你需要自己配置 ssl 的配置, 否则只能成功生成证书, 你的网站还是无法访问https. 但是为了安全, 你还是自己手动改配置吧.
如果你还没有运行任何 web 服务, 80 端口是空闲的, 那么 acme.sh 还能假装自己是一个webserver, 临时听在80 端口, 完成验证:
三、 安装证书
前面证书生成以后, 接下来需要把证书 copy
到真正需要用它的地方.
注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/
, 请不要直接使用此目录下的文件, 例如: 不要直接让 nginx/apache
的配置文件使用这下面的文件. 这里面的文件都是内部使用, 而且目录结构可能会变化.
正确的使用方法是使用 --install-cert
命令,并指定目标位置, 然后证书文件会被 copy
到相应的位置, 例如:
Apache example:
Nginx example:
重启 nginx 这里用的是 service nginx force-reload, 不是 service nginx reload, 据测试, reload 并不会重新加载证书, 所以用的 force-reload
Nginx
的配置 ssl_certificate
使用 /etc/nginx/ssl/fullchain.cer
,而非 /etc/nginx/ssl/<domain>.cer
,否则 SSL Labs
的测试会报 Chain issues Incomplete
错误。
--install-cert
命令可以携带很多参数, 来指定目标文件. 并且可以指定 reloadcmd
, 当证书更新以后, reloadcmd
会被自动调用,让服务器生效
验证后续自动更新是否正常
四、 证书过期更新
目前证书在 60
天以后会自动更新, 无需任何操作. 今后有可能会缩短这个时间, 不过都是自动的, 不用关心
五、 acme 更新
目前由于 acme
协议和 letsencrypt CA
都在频繁的更新, 因此 acme.sh
也经常更新以保持同步.
升级 acme.sh
到最新版 :
如果你不想手动升级, 可以开启自动升级:
之后, acme.sh
就会自动保持更新了.
你也可以随时关闭自动更新:
六、后期维护
1.查看现有那些域名在更新 SSL
证书
2.删除不需要更新的 SSL
证书
Over~
版权协议须知!
本篇文章来源于 Uambiguous ,如本文章侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
1910 0 2020-07-22
博主卡片
运维时间
搭建这个平台,只为分享及记载自己所遇之事和难题。
现在时间 2025-04-24
今日天气
随机推荐
站点统计
- 文章总数:241篇
- 分类总数:29个
- 评论总数:15条
- 本站总访问量 405631 次
@ymidsuwfoa 这篇文章不错!
@svmuvwpuqi 真棒!
@smdxydrauu 博主太厉害了!
@xiaozi 最后的分享的镜像下载地址打不开 服务器没有开机吗?
@yuanyuan 为什么我的4b安装centos7.9 插上tf卡 显示不兼...
@Wong arrhenius 牛比
@MakerFace 厉害了!
@TongSir 老哥 更新下我的友链链接 https://blog.ton...