HTTPS 免费SSL证书 acme.sh DNS 全自动申请 Let’s Encrypt ZeroSSL
那么为什么单域名这么麻烦还有人选择用TrustAsia的单域名证书呢?
因为Let's Encrypt也有问题,首先他只给3个月,对比TrustAsia每年只忙一次。其次2020年Let’s Encrypt出现过一次致命问题,Safari浏览器访问巨慢,原因是OSCP域名被DNS污染(被墙),而苹果系的浏览器会强制客户端联网验证OSCP,用户看到的画面就是打开网址,白屏10秒,再开始加载网页,体验极差。解决方案也有,就是OCSP Stapling,后文会细说。
BUT!最新消息是
2024年4月,由于上游TrustAsia原因,全网取消了1年的免费单域名证书,改为3个月。
那么如果我有20个子域名,我将会累死在电脑前面,无奈,又要改回Let's Encrypt ZeroSSL方案。
本文就简单概述下 2024年如何高效的申请和配置Let's Encrypt ZeroSSL的通配符证书
PS: (一些无关紧要的补充)亚洲诚信/TrustAsia旗下的SSL安全验证网站 https://myssl.com/ 会把Let's Encrypt的证书列为 不安全,你品,你细品。
对比另一个全球公认的SSL安全验证网站https://www.ssllabs.com认为Let's Encrypt是安全的
折腾
首先大方向肯定是人越是轻松越好,争取脚本全自动更新
这里选择全自动脚本
https://github.com/acmesh-official/acme.sh
官方文档里的 Supported CA
可以看到他支持自动申请哪些机构的证书
我这里选择默认的ZeroSSL
因为Letsencrypt可能会被某些可能无良的测评说不安全
Supported CA
ZeroSSL.com CA(default)
Letsencrypt.org CA
BuyPass.com CA
SSL.com CA
Google.com Public CA
Pebble strict Mode
Any other RFC8555-compliant CA
准备工作0 安装过程
参考官方教程里的这一段
https://github.com/acmesh-official/acme.sh/wiki/Install-in-China
由于原版的shell中会连 https://raw.githubusercontent.com/ 导致下载失败
大陆地区用gitee方案 可以快速直连 注意邮箱地址改成你自己的
git clone https://gitee.com/neilpang/acme.sh.gitcd acme.sh./acme.sh --install -m my@example.com
准备工作1 DNS自动配置权限申请
全自动申请有2个方案
1. HTTP方式是通过Apache/Nginx映射目录,放文件,来证明你对域名的所有权
2. DNS方式是通过修改DNS配置来证明对域名的所有权
我这里选择DNS,因为网上查到的教程都在用这个,我懒得研究,照搬,一次跑通
我这里是以腾讯云为例的,你需要找到你的域名提供商,并拿到授权的key
腾讯云申请地址:
https://console.dnspod.cn/account/token/token
阿里云申请地址:
https://ram.console.aliyun.com/users
配置目录 /root/.acme.sh/dnsapi/dns_xxx.sh
(官方文档推荐是修改Linux环境变量来赋值Key和Secret 我这里简单粗暴直接shell文件了)
阿里云修改 dns_ali.sh
#!/usr/bin/bashAli_API="https://alidns.aliyuncs.com/"Ali_Key="xxxxxxxxxx"Ali_Secret="xxxxxxxxxxxxxxxxxxxxxxxxx"#Usage: dns_ali_add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"dns_ali_add() {...}
腾讯云修改dns_dp.sh
#!/usr/bin/bash# Dnspod.cn Domain apiDP_Id="1234567890"DP_Key="xxxxxxxxxxxxxxxxxxxxxxxxxxx"REST_API="https://dnsapi.cn"######## Public functions ######################Usage: add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"dns_dp_add() {...}
准备工作2 注册ZeroSSL
https://app.zerossl.com/developer
注册zerossl
点击Generate
记录eab-kid和eab-hmac-key
正式开始
# 进入目录cd /root/.acme.sh# 注册账号# 切记这里的key要改成你自己的!./acme.sh --register-account --server zerossl --eab-kid xxx --eab-hmac-key xxx
# 自动DNS dnspod 多域名 自定义输出目录# 切记这里域名要改成你自己的!# 切记这里的目录 /path/to/certfile/in/apache/ 要改成你自己的,确保文件夹存在!./acme.sh --issue --dns dns_dp -d zzzmh.cn -d *.zzzmh.cn \--cert-file /path/to/certfile/in/apache/cert.pem \--key-file /path/to/keyfile/in/apache/key.pem \--fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
成功后配置nginxnginx.conf
server {listen 443 ssl http2 default_server;server_name zzzmh.cn;# 证书部分ssl_certificate /path/to/certfile/in/apache/fullchain.pem;ssl_certificate_key /path/to/certfile/in/apache/key.pem;# TLS 握手优化ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;keepalive_timeout 75s;keepalive_requests 100;# TLS 版本控制ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;# ocspssl_stapling on;ssl_stapling_verify on;ssl_trusted_certificate /path/to/certfile/in/apache/fullchain.pem;resolver 8.8.8.8 8.8.4.4 valid=300s;resolver_timeout 10s;location / {...}}
这里需要注意ssl_certificate要配置fullchain.pem
如果配置cert.pem也可以跑通,但是会出现如下错误,据说微信小程序的请求也会报错!
降级原因:1. 证书链不完整,降级为B,具体详情可参考《缺少证书链的问题和解决办法》。
关于OCSP必须开启,否则苹果系设备用Safari访问会卡白屏10秒以上

SSLLAB
(这里只得B评分,是因为他家认为保留TLS1.0和1.1协议是不安全的,我个人认为应该逐步取消支持,否则老设备用户将无法访问。)

遗留问题
- 无法开启TLS1.3,调查后发现可能是系统openssl版本问题,下一篇文章细说
- ZeroSSL网页客户端看不到CA证书,这个我暂时还没解决
