随着google近些年的推行,https加密传输协议已经是目前安全上网的必备要求;CA证书是实现https的基础,目前随着Let’s Encrypt服务商的免费证书有效期从一年缩短到3个月,手动申请更新维护证书非常繁琐,甚至证书遗漏续期导致的服务下线会带来更大损失。
为此,本文使用开源证书申请维护项目acme.sh简单几步即可实现域名证书申请与永久自动更新
安装acme.sh
注意:运行前,请将email替换为自己实际使用邮箱地址curl https://get.acme.sh | sh -s email=my@example.com
为acme.sh创建别名
alias acme.sh='/root/.acme.sh/acme.sh'
申请通配符证书流程:需要在服务器上设置域名dns解析信息,具体步骤如下:(以cloudflare dns解析为例)其余域名解析商配置设置参考:官方dns解析配置文档
- 在域名解析服务商处,生成账户授权token并设置为服务器环境变量
export CF_Token="***"
- 获取所需要解析域名的token信息
export CF_Zone_ID="***" export CF_Account_ID="***"
- 运行acmh脚本,自动进行域名校验并生成域名通配符证书
acme.sh --issue --dns dns_cf -d 域名.com -d "*.域名.com"
安装证书(以nginx为例)
脚本生成证书保存在/root/.acme.sh
里,建议通过官方安装脚本来将证书复制到指定目录,因为使用安装脚本能够在acme更新证书时,同步更新被安装位置对证书并支持运行指定命令,以nginx为例,可在证书自动更新时同步更新nginx目录下的证书信息并重启nginx服务,真正意义上实现证书与服务自动更新
注意:请先在nginx目录下创建需要存放证书文件的目录acme.sh --install-cert -d 域名.com --key-file /etc/nginx/ssl/域名.com.key --fullchain-file /etc/nginx/ssl/域名.com.cer --reloadcmd "systemctl reload nginx"
nginx配置
通过上述步骤,证书已被安装到nginx下的自定义目录内,并将自动在证书更新时运行systemctl reload nginx
重新挂载nginx服务
在nginx配置文件内指定证书即可开始https之旅啦!server { listen 80; server_name 域名.com; # 将所有 HTTP 请求重定向到 HTTPS return 301 https://$host$request_uri; } server { listen 443 ssl; server_name 域名.com; # 证书路径 ssl_certificate /etc/nginx/ssl/域名.com.cer; ssl_certificate_key /etc/nginx/ssl/域名.com.key; # 建议的 SSL 配置 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; root /home/web/actions; # 网站根目录 index index.html index.htm; # 默认首页文件 location / { try_files $uri $uri/ =404; } }