CertH certH
本页目录

如何拿到 A+ SSL 评级(2026 检查清单)

更新于 2026-11-03 · 7 分钟阅读

A+ 不是另一种证书,而是另一套 TLS 配置。多数停在 A 的站点只差一项设置:TLS 1.2 终止得没问题,但从未启用 TLS 1.3,或者 HSTS 的时长不够。

到底是什么在决定评级

CertH 只凭一次纯 TLS 握手,从五个加权维度打分:证书有效性与证书链、密钥强度与签名算法、支持的协议版本、协商出的加密套件,以及 HSTS 与 OCSP stapling。全程不接触服务器、不装探针、不上传配置文件——所有结果都像浏览器那样从外部观察得到。

阈值很简单。A+ 要求总分 ≥95、协商协议列表里出现 TLS 1.3,且 HSTS 要么已经 preload,要么 max-age 至少 180 天。A 从 90 起,B 80,C 70,D 55,低于 55 为 F。证书过期直接判 0 分。

把你从 A 推到 A+ 的四项改动

实践中差距几乎总是这四项之一。按顺序改——每一项都能从外部独立验证,所以每改一步都可以重新扫描确认。

  • •启用 TLS 1.3。它本身就计分,而且即使其余各项都是满分 100,A+ 也强制要求它。
  • •把 HSTS 提到至少 max-age=15552000(180 天)。一年(31536000)是最常见的选择。
  • •下发完整证书链,包含中间证书。缺中间证书会在部分客户端表现为证书链错误并扣分。
  • •启用 OCSP stapling,让吊销状态随握手一起传过来,而不是把访客 IP 泄露给 CA。

能拿 A+ 的 nginx 配置

下面是现代 nginx(1.19+,OpenSSL 1.1.1+)可用的完整 server 片段。如果你的 nginx 是针对更老的 OpenSSL 编译的,无论这里怎么写,TLS 1.3 都会静默不可用——先用 nginx -V 确认。

ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305;

ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;

ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
resolver 1.1.1.1 8.8.8.8 valid=300s;

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

能拿 A+ 的 Apache 配置

Apache 需要在 server 级别声明一次 stapling 缓存,不能放在虚拟主机里。其余配置放进 <VirtualHost *:443> 块。

SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder off
SSLSessionTickets off

SSLUseStapling on
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

让站点停在 A 的错误

最常见的一个:在仍有纯 HTTP 子域名的域上开启带 includeSubDomains 的 HSTS——那些子域会立刻打不开,而通常的反应是把整个响应头删掉,于是又退回 A。HSTS 要分阶段推:先用 300 秒的 max-age,观察一周有没有异常,再逐级拉到一年。

第二个常见错误是以为证书够新就等于开了 TLS 1.3。证书和协议版本彼此独立。一台只会说 TLS 1.2 的服务器,配上全新的证书,分数依然低于 95。

第三个是源站前面挂了 CDN。如果 Cloudflare、Fastly 或负载均衡终止了 TLS,源站的配置就失去意义——评级反映的是边缘节点,所以得在边缘那边改。

自己动手验证

每一项都能在终端几秒内确认。TLS 1.3 只有服务器真的支持才会协商成功,HSTS 会出现在响应头里,stapling 会体现在 OCSP 响应块中。

# Does the server actually negotiate TLS 1.3?
openssl s_client -connect example.com:443 -tls1_3 -servername example.com </dev/null 2>/dev/null | grep "Protocol"

# Is HSTS set, and for how long?
curl -sI https://example.com | grep -i strict-transport-security

# Is OCSP stapling actually working?
openssl s_client -connect example.com:443 -status -servername example.com </dev/null 2>/dev/null | grep -A2 "OCSP Response"

FAQ

A+ 需要付费证书或 EV 证书吗?

不需要。DV(域名验证)证书完全可以拿 A+——评级衡量的是 TLS 配置,不是验证等级。证书类型只在它改变证书链或密钥算法时才有影响。

为什么续期证书后评级掉了?

续期常常换了签发机构或密钥类型,有些服务器 reload 后会回退到另一套加密套件。CertH 会把这次变化记在域名报告的「分数变化」解读里,并给出具体原因。

要拿 A+ 必须做 HSTS preload 吗?

不必。preload 只是满足 HSTS 要求的两种方式之一;max-age 达到 180 天而不做 preload 同样可以。preload 更严格也更难撤回,可以当作可选项。

继续阅读