MENU

使用acme.sh 给网站上把锁(https)

2020 年 12 月 23 日 • Linux

使用acme.sh 给网站上把锁(https)

万年没更新了。新申请的域名ggui.net经历了漫长的14天,终于审核通过了。索性将新域名免费白嫖ca证书过程记录一下。我所使用的工具是acme.sh 这个脚本使用Let's Encrypt组织颁发的证书,这个组织是免费提供ca证书的组织,话不多少上教程

1.登录域名指向的服务器

2.下载acme.sh

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

安装成功后 发现脚本文件 会在路径 /root/.acme.sh 同时 安装成功说明建议将脚本弄个别名设置在环境变量

3.设置环境变量

vi ~/.bashrc

3.1在环境变量中添加

alias acme.sh=~/.acme.sh/acme.sh

3.2使环境变量生效

source ~/.bashrc

4. acme.sh 提供了多种申请证书的方式

因为网站上了 cdn所以 使用只能dns方式 (关于方式的说明后面会有补充) 如果上了cdn和我用一样的方式就好了

4.1 登录腾讯云找到自己的

地址: https://console.dnspod.cn/account/token

点击创建密钥 找到自己的ID 和 TOEKN

保存好 执行以下命令

export DP_Id="ID"
export DP_Key="TOKEN"

最后执行

-d 后面是自己要申请的域名 我这里用的*.ggui.net 是泛域名.

--key-file 指定私钥 路径 + 文件名
--fullchain-file 指定公钥 路径 + 文件名
--reloadcmd 执行结束后进行的操作

acme.sh --issue --dns dns_dp -d *.ggui.net --key-file /etc/nginx/acme/\*.ggui.net/*.ggui.net.key.pem --fullchain-file /etc/nginx/acme/\*.ggui.net/*.ggui.net.cert.pem --reloadcmd "service nginx force-reload"

然后将公钥 和 私钥 文件配置到nginx中

#公钥位置
ssl_certificate /etc/nginx/acme/*.ggui.net/*.ggui.net.cert.pem;
#私钥位置
ssl_certificate_key /etc/nginx/acme/*.ggui.net/*.ggui.net.key.pem;

5.续签证书

使用api dns模式 (也就是上文提供的方式 )则会自动续签 原理 是用的 crontab 自动来检查证书有效期 使用一下命令 查看自动续签任务.

本人证书还没过期 没检查是否有效.

crontab -e 

6.补充说明

申请证书除dns方式 还有一种http方式

-d 指定要申请的域名
--webroot 网站跟目录

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

如果你用的 apache服务器, acme.sh 还可以智能的从 apache的配置中自动完成验证, 你不需要指定网站根目录:

acme.sh --issue  -d mydomain.com   --apache

如果你用的 nginx服务器, 或者反代, acme.sh 还可以智能的从 nginx的配置中自动完成验证, 你不需要指定网站根目录:

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

注意, 无论是 apache 还是 nginx 模式, acme.sh在完成验证之后, 会恢复到之前的状态, 都不会私自更改你本身的配置. 好处是你不用担心配置被搞坏, 也有一个缺点, 你需要自己配置 ssl 的配置, 否则只能成功生成证书, 你的网站还是无法访问https. 但是为了安全, 你还是自己手动改配置吧.