0、你得有个域名
1、执行自动安装脚本
curl https://get.acme.sh | sh
-
2、查看是否安装成功
- 查看版本号
acme.sh --version
- 如果
-bash: acme.sh: command not found
,执行下面的代码,将命令加入环境变量
alias acme.sh=~/.acme.sh/acme.sh
正常来说这行命令不需要手动执行,执行
curl https://get.acme.sh | sh
这条命令执行的时候,会自动的执行alias acme.sh=~/.acme.sh/acme.sh
- 检查自动更新证书的cronjob是否已被添加
crontab -e
如果没有被添加需要手动添加
14 0 * * * "/home/ec2-user/.acme.sh"/acme.sh --cron --home "/home/ec2-user/.acme.sh" > /dev/null
3、将默认证书改为
letsencrypt
acme.sh --set-default-ca --server letsencrypt
- 4、生成证书(这个环节对域名所有权验证有依赖,所以这里生成证书一般分为两种类型:
http
、dns
;这里采用dns
的方式)
如果考虑采用
http
的方式,可以参考这里
4.1、DNS具体还分两种方式,手动和自动,由于手动无法实现自动续签过期的证书,这里采用自动的方式
-
4.2、自动的方式需要调用DNS服务商的api,需要
key
和secret
; 这里以阿里云为例:4.2.1、创建RAM用户
4.3、服务器执行以下命令生成证书
export Ali_Key="xxxx"
export Ali_Secret="xxx"
acme.sh --issue --dns dns_ali -d *.siquanzhuanxiang.top
- 4.3、打印以下内容表示证书生成成功:
-----END CERTIFICATE-----
[Fri Aug 25 12:08:59 CST 2023] Your cert is in: /root/.acme.sh/*.xx.top_ecc/*.xx.top.cer
[Fri Aug 25 12:08:59 CST 2023] Your cert key is in: /root/.acme.sh/*.xx.top_ecc/*.xx.top.key
[Fri Aug 25 12:08:59 CST 2023] The intermediate CA cert is in: /root/.acme.sh/*.xx.top_ecc/ca.cer
[Fri Aug 25 12:08:59 CST 2023] And the full chain certs is there: /root/.acme.sh/*.xx.top_ecc/fullchain.cer
- 5、安装证书(带自动刷新防止过期)
是一行命令,该命令会生成证书会放到指定的目录,命令的参数中需要指定域名(要与上面操作中域名保持一致),并且制定证书存放目录;
5.1、确保存在目录/etc/nginx/tls/
5.2、--reloadcmd "service nginx force-reload"
该参数表示重启Nginx服务,如果Nginx服务尚未安装,请剔除该参数
acme.sh --install-cert -d *.siquanzhuanxiang.top --key-file /etc/nginx/tls/key.pem --fullchain-file /etc/nginx/tls/fullchain.pem --reloadcmd "service nginx force-reload"
根据web服务器需要的文件按需引入对应的参数,reloadcmd定义证书更新后重启对应的web服务命令。(这里是以Nginx为例)
- 6、Nginx配置文件中引用证书:
...
server {
listen 443 ssl;
ssl_certificate /etc/nginx/tls/fullchain.pem;
ssl_certificate_key /etc/nginx/tls/key.pem;
# ...
}