2019年4月

搭了博客一直犯懒,没更新几篇,但是因为服务器价格的问题博客东搬西搬迁移了好几次(还不是因为穷),每次迁移后总是记不起来证书怎么申请,用的时候到处搜,下次迁移又忘了。。。这次索性记录下来,方便以后。
acme.sh项目地址:acme.sh
这是项目的简单介绍:

acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书.
主要步骤:
安装 acme.sh
生成证书
copy 证书到 nginx/apache 或者其他服务
更新证书

安装acme.sh

curl  https://get.acme.sh | sh
source ~/.bashrc

生成证书

生成证书有两种方法http 和 dns

我用的是DNS的方式: 在自己的域名后台添加 txt 解析记录, 用来验证域名所有权
因为我用的是NameSilo,所以以NameSilo为例,具体其他请看这里:DNS API

Namesilo 是 ICANN 认证的域名域名注册商之一,注册和转入都很人性化,安全保护到位而且性价比很高,有机会我会写一篇博客来介绍NameSilo,嗯,有机会-_-!!

dns 方式的真正强大之处在于可以使用域名解析商提供的 api 自动添加 txt 记录完成验证.

首先需要在NameSilo里生成API密钥。同时可以选择在此处限制对特定IP范围的访问 ,然后填在key的后面

export Namesilo_Key="xxxxxxxxxxxxxxxxxxxxxxxx"
acme.sh --issue --dns dns_namesilo --dnssleep 1200 -d domain.com -d *.domain.com

将 domain.com 以及 *.domain.com 替换为自己的域名,脚本会倒计时900秒用来等待txt 记录生效,之后证书就会自动生成了,路径会在你当前目录下的 .acme.sh 文件夹

使用证书

在这里一定注意,不要直接使用 .acme.sh 目录下的文件, 不要直接让 nginx/apache 的配置文件使用这下面的文件. 这里面的文件都是内部使用, 而且目录结构可能会变化.

正确的使用方法是使用 --installcert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置,

acme.sh  --installcert  -d  domain.com   \
        --key-file   /etc/domain.com.key \
        --fullchain-file /etc/fullchain.cer \
        --reloadcmd  "/etc/init.d/nginx reload"

这里注意 Nginx 的配置 ssl_certificate 使用 /etc/nginx/ssl/fullchain.cer ,而非 /etc/nginx/ssl/<domain>.cer ,否则 SSL Labs 的测试会报 Chain issues Incomplete 错误。

更新证书

目前证书在 60 天以后会自动更新, 你无需任何操作.

到这里,证书的申请就结束了,接下来只需要配置 nginx/apache 来使用证书就可以了。

手动更新证书

可能是因为acme.sh长期未更新,突然发现自动更新证书功能失效了

#1.更新acme.sh
acme.sh --upgrade

#2.查看所有本地证书
acme.sh --showcsr 

#3.指定证书更新:
acme.sh --renew  -d domain.com 
#或者自动更新所有需更新的证书(参考:https://www.firegod.cn/2018/07/acme_sh-request-cert/)
acme.sh --renew-all

#4.重新安装自动更新证书cronjob计划任务
acme.sh --install-cronjob 
acme.sh --uninstall-cronjob  

#5.相关:
#查看系统启动项
systemctl list-unit-files | grep enable
#查看所有cronjob计划任务
crontab -l 
#编辑cronjob计划任务
crontab -e
#查看某文件夹占用总的空间大小
du -h --max-depth=1 /usr/local/
#查看磁盘空间使用情况
df -h
#h参数一般为human-readable缩写,表示以人类易读的GB、MB、KB等格式显示文件大小