参考文1:
curl https://get.acme.sh | sh

参考文2:
ACME自动续期Let’s Encrypt 免费SSL证书
安装
- curl https://get.acme.sh | sh
- wget -O – https://freessl.cn/api/get.acme.sh | sh注册
- acme.sh –register-account –accountemail 80150348@qq.com \–server https://acme.freessl.cn/directory
服务商名称 | 服务商简称 | 所需API参数 | 获取API参数地址 |
---|---|---|---|
cloudxns | cx | export CX_Key=”123456″ export CX_Secret=”abcdef” | 点击访问 |
dnspod (cn大陆版) | dp | export DP_Id=”123456″ export DP_Key=”abcdef” | 点击访问 |
aliyun | ali | export Ali_Key=”123456″ export Ali_Secret=”abcdef” | 点击访问 |
cloudflare | cf | export CF_Key=”123456″ export CF_Email=”[email protected]“ | 点击访问 |
linode | linode | export LINODE_API_KEY=”123456″ | 点击访问 |
he | he | export HE_Username=”username” export HE_Password=”password” | he的用户名密码 |
digitalocean | dgon | export DO_API_KEY=”123456″ | 点击访问 |
namesilo | namesilo | export Namesilo_Key=”123456″ | 点击访问 |
aws | aws | export AWS_ACCESS_KEY_ID=123456 export AWS_SECRET_ACCESS_KEY=abcdef | 点击访问 |
namecom | namecom | export Namecom_Username=”username” export Namecom_Token=”123456″ | 点击访问 |
freedns | freedns | export FREEDNS_User=”username” export FREEDNS_Password=”password” | freedns的用户名密码 |
godaddy | gd | export GD_Key=”123456″ export GD_Secret=”abcdef” | 点击访问 |
yandex | yandex | export PDD_Token=”abcdef” | 点击访问 |
部署
- #一键申请证书
- ./acme.sh –issue –dns dns_ali -d *.haokaikai.cn
- #将证书部署到nginx
- ./acme.sh –install-cert -d *.haokaikai.cn \
- –key-file /data/ssl/haokaikai.cn/privkey.pem \
- –fullchain-file /data/ssl/haokaikai.cn/fullchain.pem \
- –reloadcmd “/bin/systemctl restart nginx.service“
- #实现全自动
- ./acme.sh –force –issue –dns dns_ali \
- -d *.haokaikai.cn \
- –renew-hook “acme.sh \
- –install-cert -d haokaikai.cn \
- –key-file /data/ssl/haokaikai.cn/privkey.pem \
- –fullchain-file /data/ssl/haokaikai.cn/fullchain.pem \
- –reloadcmd \”/bin/systemctl restart nginx.service\””当我们的证书颁发完成之后,acme.sh 脚本会每天去检查它所管理的证书是否即将到期(过期前30天),此时,它将通过你上次申请该证书的方式重新申请证书。如果你也添加了 –renew-hook,从此就不管用管证书的是否到期了
说在前面
本文仅记录给自己的网站添加“小绿锁”的动手操作过程,不涉及 HTTPS 工作原理等内容的讲解,感兴趣的同学可以参考篇尾的文章自行了解。
简单了解下我的实验环境:
- 云服务器:CentOS 7.4
- 网站宿主:Nginx 1.12.2
- 备案域名:www.esofar.cn
这里以
www.esofar.cn
作为演示域名,届时一定要修改为自己的域名。
什么是 Let’s Encrypt
Let’s Encrypt 是一个由非营利性组织 互联网安全研究小组(ISRG)提供的免费、自动化和开放的证书颁发机构(CA)。
简单的说,借助 Let’s Encrypt 颁发的证书可以为我们的网站免费启用 HTTPS(SSL/TLS) 。
Let’s Encrypt免费证书的签发/续签都是脚本自动化的,官方提供了几种证书的申请方式方法,点击此处 快速浏览。
官方推荐使用 Certbot 客户端来签发证书,这种方式可参考文档自行尝试,不做评价。
我这里直接使用第三方客户端 acme.sh 申请,据了解这种方式可能是目前 Let’s Encrypt 免费证书客户端最简单、最智能的 shell 脚本,可以自动发布和续订 Let’s Encrypt 中的免费证书。
安装 acme.sh
安装很简单,一条命令:
curl https://get.acme.sh | sh
整个安装过程进行了以下几步,了解一下即可:
- 把 acme.sh 安装到当前用户的主目录
$HOME
下的.acme.sh
文件夹中,即~/.acme.sh/
,之后所有生成的证书也会放在这个目录下; - 创建了一个指令别名
alias acme.sh=~/.acme.sh/acme.sh
,这样我们可以通过acme.sh
命令方便快速地使用 acme.sh 脚本; - 自动创建
cronjob
定时任务, 每天 0:00 点自动检测所有的证书,如果快过期了,则会自动更新证书。
安装命令执行完毕后,执行acme.sh --version
确认是否能正常使用acme.sh
命令。
- v2.7.9如有版本信息输出则表示环境正常;如果提示命令未找到,执行
source ~/.bashrc
命令重载一下环境配置文件。
整个安装过程不会污染已有的系统任何功能和文件,所有的修改都限制在安装目录~/.acme.sh/
中。
生成证书
据 acme.sh 官方文档介绍,其实现了 acme 协议支持的所有验证协议,一般有两种方式验证:http 和 dns 验证。
也就是我们有两种选择签发证书,这里我直接选择 http 验证方式,另外一种方式本篇不做介绍,可参考文档自行尝试。
签发证书也很简单,一条命令:
acme.sh --issue -d esofar.cn -d www.esofar.cn -w /home/wwwroot/esofar.cn
简单解释下这条命令涉及的几个参数:
--issue
是 acme.sh 脚本用来颁发证书的指令;-d
是--domain
的简称,其后面须填写已备案的域名;-w
是--webroot
的简称,其后面须填写网站的根目录。
证书签发成功会有如下输出:
从截图看出,生成的证书放在了/root/.acme.sh/esofar.cn
目录。
另外,可以通过下面两个常用acme.sh
命令查看和删除证书:
- acme.sh –list
- acme.sh remove <SAN_Domains>至此,证书就下载成功。
安装证书
我的站点是由 Nginx 承载的,所以本节内容重点记录如何将证书安装到 Nginx,其他 webserver 请参考 acme.sh 文档自行实践。废话不多说,进入本节正题。
上一小节,生成的证书放在了/root/.acme.sh/esofar.cn
目录,因为这是 acme.sh 脚本的内部使用目录,而且目录结构可能会变化,所以我们不能让 Nginx 的配置文件直接读取该目录下的证书文件。
正确的做法就是使用--installcert
命令,指定目标位置,然后证书文件会被 copy 到相应的位置。
一条命令即可解决:
acme.sh –installcert -d esofar.cn \
–key-file /etc/nginx/ssl/esofar.cn.key \
/etc/nginx/ssl/
目录下。输出如下信息,则操作成功:
最后一步就是,修改 Nginx 配置文件启用 ssl,修改完成后需要重启下 Nginx,这一块不再详述。Nginx 配置请参考:
- server {
- listen 443 ssl;
- server_name esofar.cn;
- ssl on;
- ssl_certificate /etc/nginx/ssl/fullchain.cer;
- ssl_certificate_key /etc/nginx/ssl/esofar.cn.key;
- root /home/wwwroot/esofar.cn;
- index index.html;
- location / {
- try_files $uri $uri/ @router;
- index index.html;
- }
- location @router {
- rewrite ^.*$ /index.html last;
- }
- }
- server {
- listen 80;
- server_name esofar.cn;
- return 301 https://$server_name$request_uri;
更新证书
目前 Let’s Encrypt 的证书有效期是90天,时间到了会自动更新,您无需任何操作。 今后有可能会缩短这个时间, 不过都是自动的,不需要您关心。
但是,您也可以强制续签证书:
acme.sh --renew -d example.com --force
更新 acme.sh
目前由于 acme 协议和 letsencrypt CA 都在频繁的更新, 因此 acme.sh 也经常更新以保持同步。
升级 acme.sh 到最新版:
acme.sh --upgrade
如果您不想手动升级,,可以开启自动升级:
acme.sh --upgrade --auto-upgrade
您也可以随时关闭自动更新:
acme.sh --upgrade --auto-upgrade 0
acme申请证书报错:Please update your account with an email address first.的修复方法
出现以上错误的都给我老老实实去看官方说明!!!
acme.sh说明
其实日志已经提示了,第二行连用法都写出来了!
Please update your account with an email address first.
acme.sh –register-account -m [email protected]
1.先果断重新安装acme,卸载:
.acme.sh/acme.sh –uninstall
安装 Acme 脚本之后,请先执行下面的命令(下面的邮箱为你的邮箱)
/acme.sh --register-account -m [email protected]
2.然后安装时别再忘记写邮箱了!
或:
curl https://get.acme.sh | sh -s [email protected]
Cloudflare的最后再继续添加api密匙啥的环境变量等然后再申请。
未经允许不得转载:搬瓦工VPS_美国VPS » 备忘:网站泛域名证书+宝塔 服务器自定义SSL进行设置