linux

acme.sh 的简单使用

acme.sh 是纯 shell script 写的,它实现了 acme 协议, 可以从 letsencrypt 生成免费的证书。它不依赖于 python,也不需要 root 权限,而且支持不少云服务商,可以实现全自动证书生成与续期。

acme.sh 安装步骤如下:

wget -O - https://get.acme.sh | sh

该命令的输出大致如下:

[2020年 07月 08日 星期三 16:20:30 CST] Installing from online archive.
[2020年 07月 08日 星期三 16:20:30 CST] Downloading https://github.com/acmesh-official/acme.sh/archive/master.tar.gz
[2020年 07月 08日 星期三 16:20:34 CST] Extracting master.tar.gz
[2020年 07月 08日 星期三 16:20:34 CST] It is recommended to install socat first.
[2020年 07月 08日 星期三 16:20:34 CST] We use socat for standalone server if you use standalone mode.
[2020年 07月 08日 星期三 16:20:34 CST] If you don't use standalone mode, just ignore this warning.
[2020年 07月 08日 星期三 16:20:34 CST] Installing to /home/manjaro/.acme.sh
[2020年 07月 08日 星期三 16:20:34 CST] Installed to /home/manjaro/.acme.sh/acme.sh
[2020年 07月 08日 星期三 16:20:34 CST] Installing alias to '/home/manjaro/.zshrc'
[2020年 07月 08日 星期三 16:20:34 CST] OK, Close and reopen your terminal to start using acme.sh
[2020年 07月 08日 星期三 16:20:34 CST] Installing cron job
no crontab for manjaro
no crontab for manjaro
[2020年 07月 08日 星期三 16:20:34 CST] Good, bash is found, so change the shebang to use bash as preferred.
[2020年 07月 08日 星期三 16:20:35 CST] OK
[2020年 07月 08日 星期三 16:20:35 CST] Install success!

通过输出,我们应该明白,acme.sh 会安装到用户目录的 .acme.sh 下面,并且会在 .zshrc 或者 .bashrc 里添加别名,最后出创建一个 cron 任务,我们可以通过 crontab -e 查看,比如我的就如下:

34 0 * * * "/home/manjaro/.acme.sh"/acme.sh --cron --home "/home/manjaro/.acme.sh" > /dev/null

即 每天 0 点 34 分执行 /home/manjaro/.acme.sh"/acme.sh --cron --home "/home/manjaro/.acme.sh 至于 cron 表达式,以后有空再写。

接着 终端执行:

export Ali_Key="xxx"
export Ali_Secret="xxx"
acme.sh --issue --dns dns_ali -d *.kpromise.top

执行完毕以上命令,即可生成证书,之后,只需要修改下 nginx 配置即可,也支持其他云服务商,这里是以 阿里云 为例,且 key 和 secret 是你的子账号的,子账号需要有 管理云解析(DNS)的权限,其他云服务商,请参考:https://github.com/acmesh-official/acme.sh/wiki/dnsapi 目前支持 100多家,足够了。

nginx 配置大致如下:

server {
    listen 443 ssl;
    server_name www.kpromise.top;
    ssl_certificate /root/.acme.sh/kpromise.top/fullchain.cer;
    ssl_certificate_key /root/.acme.sh/kpromise.top/kpromise.top.key;
}

唯一的问题是 你需要 在 证书重新生成后,执行 nginx -s reload 不然还是旧证书,仅此而已!当然也可以使用它的 install 命令

acme.sh --install-cert -d kpromise.top \
--cert-file /etc/nginx/certs/kpromise.top/cert \
--key-file /etc/nginx/certs/kpromise.top/key \
--fullchain-file /etc/nginx/certs/kpromise.top/fullchain \
--reloadcmd "systemctl reload nginx.service"

 

full-stack-trip

Share
Published by
full-stack-trip

Recent Posts

Android 自定义 View 入门

说来惭愧,工作数年,连基本的自…

4 年 ago

retrofit 同时支持 xml 和 json

retrofit 解析 jso…

4 年 ago

mysql - 存储过程 从入门到放弃

最近有个报表的需求,于是乎用了…

4 年 ago

奶嘴战略 - 你不得不知道的扎心真相(一)

一句:英雄枯骨无人问,戏子家事…

4 年 ago

wrk -更现代化的http压测工具

wrk 是一款更现代化的 ht…

4 年 ago

java 枚举类实现的单例与 spring boot 枚举类依赖注入

我们知道,在单例的诸多实现里,…

4 年 ago