一、前言
本文旨在提供免费更新https证书的方案,原本使用的是certbot-auto,由于certbot-auto已被弃用,寻找了acme.sh来解决配置https的问题。
二、sh-acme
1.安装acme
1.1.下载acme
github比较慢,可用github.com.cnpmjs.org代替
git clone https://github.com.cnpmjs.org/acmesh-official/acme.sh
1.2.配置安装
./acme.sh --install --home ~/zhihao_myacme --config-home ~/zhihao_myacme/data --cert-home ~/zhihao_mycerts --accountemail "zhihao@objectmail.com" --accountkey ~/zhihao_myaccount.key --accountconf ~/zhihao_myaccount.conf
说明:
–home 是要安装的自定义目录acme.sh。默认情况下,它安装到~/.acme.sh
–config-home 是一个可写文件夹,acme.sh将在其中写入所有文件(包括cert / keys,configs)。默认情况下–home
–cert-home 是自定义的目录,用于保存您颁发的证书。默认情况下,它保存在中–config-home。
–accountemail是用于向Let’s Encrypt注册帐户的电子邮件,您将在此处收到续订通知电子邮件。默认为空。
–accountkey 是保存您帐户私钥的文件。默认情况下,它保存在中–config-home。
–useragent 是用于发送到“让我们加密”的用户代理标头值
2.生成证书
acme.sh 实现了 acme 协议支持的所有验证协议. 一般有两种方式验证: http 和 dns 验证.,本文主要讲http+nginx方式
2.1http 方式需要验证你的域名所有权,它会在你域名根目录下的/.well-known/acme-challenge目录下生成一个文件,再访问校验
(1)配置nginx
server {
listen 80;
server_name www.test.com;
location /.well-known/acme-challenge/ {
default_type "text/plain";
root /www/certbot/www.test.com;
}
location / {
return 301 https://$http_host$request_uri;
}
}
(2)生成证书
acme.sh --issue -d www.test.com --webroot /www/certbot/www.test.com/
说明:
-d 校验域名
–webroot 校验域名生成校验文件目录,与nginx配置的/.well-known/acme-challenge/下目录一致
(3)安装证书
acme.sh --install-cert -d www.test.com \
--key-file /www/certbot/www.test.com/key.pem \
--fullchain-file /www/certbot/www.test.com/cert.pem \
--reloadcmd "nginx -s reload"
到这里证书就已经申请完毕,接下来就是配置nginx的httpps配置了
3.配置nginx的https配置
server {
#ssl 需要监听443端口
listen 443 ssl;
# CA证书对应的域名
server_name www.test.com;
# 刚刚安装证书密匙绝对路径
ssl_certificate /www/certbot/www.test.com/cert.pem;
# 刚刚安装证书key绝对路径
ssl_certificate_key /www/certbot/www.test.com/key.pem;
# session超时
ssl_session_timeout 5m;
# 协议类型
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# ssl算法列表
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
# 是否 服务器决定使用哪种算法 on/off TLSv1.1 的话需要开启
ssl_prefer_server_ciphers on;
location / {
default_type "text/plain";
return 200 '配置https成功';
}
}
# 如果用户通过 http 访问 直接重写 跳转到 https 这个是一个很有必要的操作
server {
listen 80;
server_name www.test.com;
location /.well-known/acme-challenge/ {
default_type "text/plain";
root /www/certbot/where.test.com/;
}
location / {
return 301 https://$http_host$request_uri;
}
}
重启nginx,直接访问http://www.test.com,会发现链接已跳转https://www.test.com且访问成功。
4.证书更新
目前证书在 60 天以后会自动更新, 你无需任何操作. 今后有可能会缩短这个时间, 不过都是自动的, 你不用关心.。
其他命令:
手动更新证书:
acme.sh --renew -d www.blscy.cn --force
查看证书列表:
acme.sh --list
停止renew
acme.sh --remove -d example.com
三、go-acme(lego)
Installation :: Let’s Encrypt client and ACME library written in Go.
lego -d qy.easywork365.com -d pc.easywork365.com -d wx.easywork365.com -d msg.easywork365.com \
--path=/etc/lego --http --http.webroot=/data1/webroot/ew365/qy -m=ljm@sanchi.vip \
-k rsa4096 run
lego -d qy.easywork365.com -d pc.easywork365.com -d wx.easywork365.com -d msg.easywork365.com \
--path=/etc/lego --http --http.webroot=/data1/webroot/ew365/qy -m=ljm@sanchi.vip \
-k rsa4096 renew