申请Let's Encrypt 或Zerossl免费泛域名证书,实现全站Https,可自动续期
前言
目前全网都在向https转,虽然网上很多申请免费证书的地方但一般都是单域名的,泛域名证书一般个人用户是用不起的,下面介绍个方法,
证书官方链接,二选一
https://letsencrypt.org/
https://zerossl.com/
环境要求
Linux服务器一台,本文使用Ubuntu18
xxxx.com 域名一枚
DnsPod账号一个,用于解析xxxx.com这个域名
懂得科学上网方法,因为要用到github可能会访问不到,能访问到的话忽略
下载安装脚本
后面-s email参数可省略,推荐加上
curl https://get.acme.sh | sh -s email=my@example.com

如果命令行实在下载不了,也可直接下载压缩包上传后再解压
注册邮箱
如果上面已经注册邮箱,则这一步可跳过
cd ~/.acme.sh ./acme.sh --register-account -m 735579768@qq.com
DnsPos申请Token
登陆DnsPos后台

如果上面已经创建成功的话,下面两步可忽略
https://www.dnspod.cn/console/user/security

创建Id和Token

生成证书
默认生成的证书是zerossl,如果想用let's则可在命令最后添加 --server letsencrypt 指定
export DP_Id="******" export DP_Key="************************" ./acme.sh --issue -d xxxx.com -d *.xxxx.com --dns dns_dp --log --cert-home /xxxxxx/nginx/ssl --dnssleep 30

最终会在以下目录生成证书文件

上面步骤只需第一次生成时配置,想生成其它域名时可用下面一句命令就可完成, 后面--cert-home指定证书生成后存放的目录,--dnssleep 30 添加完dns记录后等30秒,默认是用国外dns来检测的,国内可能访问慢或访问不了
./acme.sh --issue -d bbbb.com -d *.bbbb.com --dns dns_dp --log --cert-home /xxxxxx/nginx/ssl --dnssleep 30
Nginx部署
添加下面配置
server {
listen 80;
server_name xxxx.com *.xxxx.com;
root /www/xxxx.com;
index index.php index.html index.htm;
#charset koi8-r;
#access_log /dev/null;
access_log /var/log/nginx/openresty.xxxx.com.access.log main;
error_log /var/log/nginx/openresty.xxxx.com.error.log warn;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
fastcgi_pass php74:9000;
include fastcgi-php.conf;
include fastcgi_params;
}
}
server {
listen 443 ssl;
server_name xxxx.com *.xxxx.com;
# ssl on;
# 开启 OCSP Stapling ---当客户端访问时 NginX 将去指定的证书中查找 OCSP 服务的地址,获得响应内容后通过证书链下发给客户端。
ssl_stapling on;
# 启用OCSP响应验证,OCSP信息响应适用的证书
ssl_stapling_verify on;
# 证书颁发结构的中间证书+根证书
ssl_trusted_certificate /ssl/xxxx.com/ca.cer;
ssl_certificate /ssl/xxxx.com/fullchain.cer;
ssl_certificate_key /ssl/xxxx.com/xxxx.com.key;
location ~ \.php$ {
fastcgi_pass php74:9000;
include fastcgi-php.conf;
include fastcgi_params;
}
}特别注意里面的以下配置,可加速客户端(浏览器)访问,具体可查阅 OCSP协议 相关
# 开启 OCSP Stapling ---当客户端访问时 NginX 将去指定的证书中查找 OCSP 服务的地址,获得响应内容后通过证书链下发给客户端。 ssl_stapling on; # 启用OCSP响应验证,OCSP信息响应适用的证书 ssl_stapling_verify on; # 证书颁发结构的中间证书+根证书 ssl_trusted_certificate /ssl/xxxx.com/ca.cer;
上面配置可视自己情况添加,原因如下:
2020年4月2日,大陆地区对Let's Encrypt的OCSP服务器(ocsp.int-x3.letsencrypt.org)所使用的Akamai CDN域名a771.dscq.akamai.net进行了DNS污染,导致部分浏览器首次访问使用Let's Encrypt证书的网站时无法完成OCSP检查,加载缓慢。
2020年11月20日,Let's Encrypt 推出了 R3 中间证书,使用了新的 OCSP 服务器地址(r3.o.lencr.org),问题得到解决
最后重新加载nginx配置文件

三个月有效期,到期后自动生成
自动续期
在第一部安装成功后会自动添加一条crontab定时脚本,使用 crontab -l 查看最后一行添加的定时任务
56 0 * * * /root/.acme.sh/acme.sh --cron --home /root/.acme.sh > /dev/null
如果自定义了证书路径,或有新加的参数,就请修改定时任务中命令如下
/root/.acme.sh/acme.sh --cron --home /root/.acme.sh --cert-home /nginx/ssl --dnssleep 30
修改后在命令行先测试下是否能自动续期,如下指定证书目录后会自动检测里面有哪些域名,然后把命令替换上去

原文安装教程
https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E