找回密码
 立即注册

[失效] Let's Encrypt 证书- acme.sh快速签发

[复制链接]
69伙伴 发表于 2019-3-14 17:58:19 | 显示全部楼层 |阅读模式
云服务器:CentOS 7.4
网站宿主:Apache
备案域名:xjp.slybaby.cn
控制面板:BT.cn

Let's Encrypt免费证书的签发/续签都是脚本自动化的,官方提供了几种证书的申请方式方法,点击此处 快速浏览。
官方推荐使用 Certbot 客户端来签发证书
我这里直接使用第三方客户端 acme.sh 申请,据了解这种方式可能是目前 Let's Encrypt 免费证书客户端最简单、最智能的 shell 脚本,可以自动发布和续订 Let's Encrypt 中的免费证书。
安装 acme.sh
安装很简单,一条命令:
  1. curl https://get.acme.sh | sh
复制代码


有可能会遇到 一个红色提示 忽略即可
[Thu Mar 14 17:51:03 CST 2019] Downloading https://github.com/Neilpang/acme.sh/archive/master.tar.gz
[Thu Mar 14 17:51:04 CST 2019] Extracting master.tar.gz
[Thu Mar 14 17:51:04 CST 2019] It is recommended to install socat first.
[Thu Mar 14 17:51:04 CST 2019] We use socat for standalone server if you use standalone mode.
[Thu Mar 14 17:51:04 CST 2019] If you don't use standalone mode, just ignore this warning.



整个安装过程进行了以下几步,了解一下即可:
  • 把 acme.sh 安装到当前用户的主目录$HOME下的.acme.sh文件夹中,即~/.acme.sh/,之后所有生成的证书也会放在这个目录下;
  • (此条最新版本可能已经集成了先试试看)创建了一个指令别名alias acme.sh=~/.acme.sh/acme.sh,这样我们可以通过acme.sh命令方便快速地使用 acme.sh 脚本
  • 安装结束后会自动添加一条定时任务(官方解释:自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书。),使用crontab -l 查看。
  • 安装命令执行完毕后,执行acme.sh --version确认是否能正常使用acme.sh命令。

参考
[root@bbr_ok /]# acme.sh --version
https://github.com/Neilpang/acme.sh
v2.8.1

如有版本信息输出则表示环境正常;如果提示命令未找到,执行source ~/.bashrc命令重载一下环境配置文件。
整个安装过程不会污染已有的系统任何功能和文件,所有的修改都限制在安装目录~/.acme.sh/中。
生成证书
据 acme.sh 官方文档介绍,其实现了 acme 协议支持的所有验证协议,一般有两种方式验证:http 和 dns 验证。
也就是我们有两种选择签发证书,这里我直接选择 http 验证方式,另外一种方式本篇不做介绍,可参考文档自行尝试。
签发证书也很简单,一条命令:

注:必须在 root 权限下运行上述命令哦,切记!切记!切记!如果域名都在阿里云,推荐使用 DNS 方式来验证

1、(一般常用)http 方式需要在你的网站根目录下放置一个文件, 来验证你的域名所有权,完成验证. 然后就可以生成证书了.
申请一个域名
  1. acme.sh --issue -d xjp.slybaby.cn -w /www/wwwroot/xjp.slybaby.cn
复制代码


-d 申请多个域名
  1. acme.sh --issue -d xjp.slybaby.cn -d abc.slybaby.cn -d def.slybaby.cn -w /www/wwwroot/xjp.slybaby.cn
复制代码

如果你用的 apache服务器, acme.sh 还可以智能的从 apache的配置中自动完成验证, 你不需要指定网站根目录:
  1. acme.sh --issue -d mydomain.com --apache
复制代码

如果你用的 nginx服务器, 或者反代, acme.sh 还可以智能的从 nginx的配置中自动完成验证, 你不需要指定网站根目录:
  1. acme.sh --issue -d mydomain.com --nginx
复制代码
注意, 无论是 apache 还是 nginx 模式, acme.sh在完成验证之后, 会恢复到之前的状态, 都不会私自更改你本身的配置. 好处是你不用担心配置被搞坏, 也有一个缺点, 你需要自己配置 ssl 的配置, 否则只能成功生成证书, 你的网站还是无法访问https. 但是为了安全, 你还是自己手动改配置吧.


如果你还没有运行任何 web 服务, 80 端口是空闲的, 那么 acme.sh 还能假装自己是一个webserver, 临时听在80 端口, 完成验证:

  1. acme.sh --issue -d mydomain.com --standalone
复制代码


简单解释下这条命令涉及的几个参数:
  • --issue是 acme.sh 脚本用来颁发证书的指令;
  • -d是--domain的简称,其后面须填写已备案的域名;
  • -w是--webroot的简称,其后面须填写网站的根目录。

2、dns 方式, 在域名上添加一条 txt 解析记录, 验证域名所有权.
这种方式的好处是, 你不需要任何服务器, 不需要任何公网 ip, 只需要 dns 的解析记录即可完成验证.
  1. acme.sh --issue --dns -d mydomain.com
复制代码
然后, acme.sh 会生成相应的解析记录显示出来, 你只需要在你的域名管理面板中添加这条 txt 记录即可.

等待解析完成之后, 重新生成证书:

  1. acme.sh --renew -d mydomain.com
复制代码
注意第二次这里用的是 –renew

dns 方式的真正强大之处在于可以使用域名解析商提供的 api 自动添加 txt 记录完成验证.
acme.sh 目前支持 cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等数十种解析商的自动集成.



结果例
-----END CERTIFICATE-----
[Thu Mar 14 18:05:58 CST 2019] Your cert is in  /www/server/panel/vhost/cert/xjp.slybaby.cn/xjp.slybaby.cn.cer
[Thu Mar 14 18:05:58 CST 2019] Your cert key is in  /www/server/panel/vhost/cert/xjp.slybaby.cn/xjp.slybaby.cn.key
[Thu Mar 14 18:05:58 CST 2019] The intermediate CA cert is in  /www/server/panel/vhost/cert/xjp.slybaby.cn/ca.cer
[Thu Mar 14 18:05:58 CST 2019] And the full chain certs is there:  /www/server/panel/vhost/cert/xjp.slybaby.cn/fullchain.cer
[root@bbr_ok /]#

另外,可以通过下面两个常用acme.sh命令查看和删除证书:

# 查看证书列表
  1. acme.sh --list
复制代码

# 删除证书
  1. acme.sh remove <SAN_Domains>
复制代码

至此,证书就下载成功。


安装证书
前面证书生成以后, 接下来需要把证书 copy 到真正需要用它的地方.
注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的文件, 例如: 不要直接让 nginx/apache 的配置文件使用这下面的文件. 这里面的文件都是内部使用, 而且目录结构可能会变化.

正确的做法就是使用--installcert命令,指定目标位置,然后证书文件会被 copy 到相应的位置。
一条命令即可解决:
  1. acme.sh  --installcert -d xjp.slybaby.cn \
  2.          --key-file /etc/nginx/ssl/xjp.slybaby.cn.key \
  3.          --fullchain-file /etc/nginx/ssl/fullchain.cer \
  4.          --reloadcmd "service nginx force-reload"
复制代码

(一个小提醒, 这里用的是 service nginx force-reload, 不是 service nginx reload, 据测试, reload 并不会重新加载证书, 所以用的 force-reload)
–installcert命令可以携带很多参数, 来指定目标文件. 并且可以指定 reloadcmd, 当证书更新以后, reloadcmd会被自动调用,让服务器生效.
值得注意的是, 这里指定的所有参数都会被自动记录下来, 并在将来证书自动更新以后, 被再次自动调用.如果是apache服务就换成相应的命令

安装复制例子
  1. acme.sh --installcert -d xjp.slybaby.cn --key-file /etc/v2ray/v2ray.key --fullchain-file /etc/v2ray/v2ray.cer
复制代码

这里我将证书放到了/etc/nginx/ssl/目录下。

最后一步就是,修改 Nginx 配置文件启用 ssl,修改完成后需要重启下 Nginx,这一块不再详述。Nginx 配置请参考:


NGINX安装证书

  1.                 ssl on;
  2.                 ssl_certificate              /usr/local/nginx/conf/ssl/www.domain.cer;
  3.                 ssl_certificate_key          /usr/local/nginx/conf/ssl/www.domain.key;
  4.                 ssl_ciphers                  EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256::!MD5;
  5.                 ssl_protocols                TLSv1 TLSv1.1 TLSv1.2;
  6.                 ssl_prefer_server_ciphers    on;
  7.                 ssl_session_cache            builtin:1000 shared:SSL:10m;
  8.                 ssl_session_timeout          1d;
  9.                 ssl_session_tickets          on;

复制代码


注解
1_root_bundle.crt (证书链文件)
2_www.domain.com_cert.crt(证书文件)
3_www.domain.com.key(私钥文件)


完成证书部署后可以通过如下站点检测网站的安全级别:



更新证书自动更新
目前 Let's Encrypt 的证书有效期是90天,时间到了会自动更新,您无需任何操作。 今后有可能会缩短这个时间, 不过都是自动的,不需要您关心。
但是,您也可以强制续签证书:
  1. acme.sh --renew -d example.com --force
复制代码

更新 acme.sh
目前由于 acme 协议和 letsencrypt CA 都在频繁的更新, 因此 acme.sh 也经常更新以保持同步。
升级 acme.sh 到最新版:
  1. acme.sh --upgrade
复制代码
如果您不想手动升级,,可以开启自动升级:
  1. acme.sh  --upgrade  --auto-upgrade
复制代码
您也可以随时关闭自动更新:
  1. acme.sh --upgrade  --auto-upgrade  0
复制代码



高级内容



宝塔面板不能续签的解决办法看这个帖子
https://www.bt.cn/bbs/forum.php?mod=viewthread&tid=16687

面板ssh无法打开
  1. pip install flask-socketio==3.0.2
  2. pip install python-socketio==2.1.2
  3. bt reload
复制代码







临时交流 ⇨点我留言
【附件·直下】非必要·勿注册

网格·联系我们 ( 京ICP备16001788号|京公网安备 11010502049360号 ) | 网站地图 | 2012- WGPro.CoM |

GMT+8, 2024-3-29 18:55

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表