申请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