acme脚本申请证书简单教程

实用教程 admin 7个月前 (03-13) 1292次浏览 0个评论

image2edec0b8b48c5796.png

介绍

之前都是买的一年的泛域名证书,也知道acme,一直懒得去搞,这几天跟以为朋友又聊起acme脚本,愈发觉得这是神器,于是搬运点教程来,备着以后用。

准备

安装依赖

不管用下面的何种方式申请,都需要安装 Acme,有一部分的申请场景需要用到相关的插件,所以我们需要提前安装。下面环境的安装方式,大家根据自己的系统选择命令安装就好了。

apt update -y          #Debian/Ubuntu 命令
apt install -y curl    #Debian/Ubuntu 命令
apt install -y socat    #Debian/Ubuntu 命令
yum update -y          #CentOS 命令
yum install -y curl    #CentOS 命令
yum install -y socat    #CentOS 命令

安装 Acme 脚本

curl https://get.acme.sh | sh

重要申明:

2021 年 6 月 17 日更新:

从 acme.sh v 3.0.0 开始,acme.sh 使用 Zerossl 作为默认 ca,您必须先注册帐户(一次),然后才能颁发新证书。

具体操作步骤如下:

1、安装 Acme 脚本之后,请先执行下面的命令(下面的邮箱为你的邮箱)
~/.acme.sh/acme.sh –register-account -m [email protected]

2、其他的命令暂时没有变动

下面提供几个命令,可以指定或修改默认证书申请方

#使用 Let’s Encrypt 签发
acme.sh --issue -d example.com --dns dns_cf --server letsencrypt
切换 acme.sh 默认 SSL 为 Let's Encrypt
acme.sh --set-default-ca --server letsencrypt
#或者更换默认服务商为 ZeroSSL
acme.sh --set-default-ca --server zerossl
#关联你的 ZeroSSL 账号([email protected] 改成你自己的 ZeroSSL 邮箱,切忌不要乱填哦!)
acme.sh --register-account -m [email protected] --server zerossl
#出现命令not found,莫慌,这是acme.sh 安装完成后,只是在.bashrc文件添加了环境变量,但是没有重新加载,source命令更新一下即可
source .bashrc
#如果不行请手动添加
nano ~/.bashrc
alias acme.sh=~/.acme.sh/acme.sh
source .bashrc
#或者使用软链
ln -s /root/.acme.sh/acme.sh /usr/local/bin/acme.sh
#或者之间添加alias
alias acme.sh=~/.acme.sh/acme.sh​
#或者直接~/.acme.sh/acme.sh

申请证书

80端口空闲的验证申请

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

~/.acme.sh/acme.sh --issue -d mydomain.com --standalone

Nginx 的方式验证申请

这种方式需要你的服务器上面已经部署了 Nginx 环境,并且保证你申请的域名已经在 Nginx 进行了 conf 部署。(被申请的域名可以正常被打开)

~/.acme.sh/acme.sh --issue  -d mydomain.com   --nginx

http 的方式验证申请

这种方式需要你的服务器上面已经部署了网站环境。(被申请的域名可以正常被打开)

原理:Acme 自动在你的网站根目录下放置一个文件, (这个文件可以被互联网访问)来验证你的域名所有权,完成验证. 然后就可以生成证书了.

实例代码:(后面的路径请更改为你的 网站根目录 绝对路径 )

~/.acme.sh/acme.sh  --issue  -d mydomain.com -d www.mydomain.com  --webroot  /home/wwwroot/mydomain.com/

DNS 验证的方式申请证书

小白比较喜欢这种方法,因为可以申请泛域名证书。

这种方式的好处是, 你不需要任何服务器, 不需要任何公网 ip, 只需要 dns 的解析记录即可完成验证. 坏处是,如果不同时配置 Automatic DNS API,使用这种方式 acme.sh 将无法自动更新证书,每次都需要手动再次重新解析验证域名所有权。

Acme.sh 目前支持 cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等数十种解析商

该方式可以申请多域名、泛域名证书,达到很多域名可以共用一张证书的目的。

这里以cloudflare为例:

获取 Cloudflare API 令牌

在域名管理首页(右下角)找到如下图,获取 API 密钥:

image06f67f5feb3f5a59.png

设置 Cloudflare API 令牌

export CF_Key="4jnff7gjn4c701b6e27884f0da0hhfuei84de07552"
export CF_Email="[email protected]"

如果使用的dnspod则可以参考以下格式:

export DP_Id="1234"
export DP_Key="sADDsdasdgdsf"

验证 DNS 并申请证书

更改下面的域名为你自己的域名

~/.acme.sh/acme.sh --issue --dns dns_cf -d vpsxb.net -d *.vpsxb.net

DNS验证(手动模式)

这种方法官方是不推荐的,不能自动续期(即需要手动续签),但是可以有效解决申请通配符通配符证书dns验证失败的问题。

先运行一遍命令:

~/.acme.sh/acme.sh --issue -d bombstory.com -d *.bombstory.com --dns dns-01

然后出现报错,要求在dns解析里加入两行txt解析,然后加上–renew参数,再运行一遍即可

~/.acme.sh/acme.sh --issue -d bombstory.com -d *.bombstory.com --dns dns-01 --renew

 

安装证书到指定文件夹

默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的证书文件。
正确的使用方法是使用 –install-cert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置,比如下面的代码:

~/.acme.sh/acme.sh --installcert -d mydomain.com --key-file /root/cert/private.key --fullchain-file /root/cert/cert.crt
chmod -R 755 /root/cert

上面的 /root/private.key 以及 /root/cert.crt 是把密钥和证书安装到 /root 目录,并改名为 private.key 和 cert.crt。

或者:

生成的证书默认放在 acme.sh 的安装目录下,不应该直接使用该目录下的文件,因为这里面的文件都是内部使用, 而且目录结构可能会发生变化。可以使用 –install-cert 命令安装证书,把证书copy到相应的位置。比如 nginx:

~/.acme.sh/acme.sh --install-cert -d example.com \
--key-file  /path/to/keyfile/in/nginx/cert.key  \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd  "service nginx force-reload"

跟上的 –reloadcmd 命令,是指定重新加载服务器的命令,证书安装成功或自动更新之后会重新加载服务使新证书生效。

证书&脚本跟新

更新证书
目前证书在 60 天以后会自动更新, 你无需任何操作. 今后有可能会缩短这个时间, 不过都是自动的, 你不用关心.

目前通过 acme.sh 生成的证书会在60天过期,那怎么更新证书呢?

更新证书

手动更新

~/.acme.sh/acme.sh --renew -d example.com --force

自动更新

安装 acme.sh 时会自动创建一个 cronjob,每天定期检查所有证书,如果证书需要更新会自动更新证书。
通过 crontab -l 查看 crontab 任务:

46 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

更新 Acme 脚本

升级 Acme.sh 到最新版本

~/.acme.sh/acme.sh --upgrade

如果你不想手动升级, 可以开启自动升级:

~/.acme.sh/acme.sh --upgrade --auto-upgrade

之后, acme.sh 就会自动保持更新了。

撤销删除证书

如果要撤销一个证书,使用:

acme.sh --list
acme.sh --revoke -d mydomain.com

如果要删除一个证书,使用:

acme.sh --list
acme.sh --remove -d mydomain.com

参考文献:

1.申请SSL证书保姆级教程

2.DNS 验证申请证书

3.从 acme.sh v3.0 说说 ZeroSSL

4.freessl免费ssl证书申请(acme.sh)

5.acme.sh实现免费自动续期的https

6.第一次使用acme.sh 手动生成证书(DNS手动模式)

7.官方说明(en)

8.官方说明(zh)

9.使用acme.sh自动签发和更新证书


VPS小白 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址