微信对SSL证书的要求其实比普通网站更严格,需要重点提醒几个容易忽略的细节:证书链完整性问题在测试环境特别常见,很多开发者会遗漏中间证书;TLS版本兼容性也容易出问题,尤其那些还在用老旧服务器的项目;还有证书有效期监控,小程序审核周期长,万一审核期间证书过期就尴尬了。微信小程序要求所有网络请求必须使用 HTTPS 协议,因此正确配置 SSL 证书至关重要。下面我说一下配置 SSL 证书的核心要点及注意事项:
一、证书基本要求
1. 权威CA签发
必须由受信任的公共证书颁发机构(CA)签发(如 Let's Encrypt、DigiCert、Sectigo、阿里云/腾讯云等)。
禁止使用自签名证书或未认证的私有证书。
2. 证书类型兼容性
支持 DV(域名验证)、OV(组织验证)、EV(扩展验证) 证书。
推荐使用 RSA 2048位 或 ECC 256位 密钥(ECC 证书性能更优)。
3. 域名匹配
证书必须覆盖小程序请求的完整域名(如 api.example.com)。
支持通配符证书(如 *.example.com),但需注意通配符仅匹配一级子域。
二、技术配置要点
1. 证书链完整
必须包含中间证书!常见错误是只部署了站点证书,缺失中间证书链。
使用工具验证:
bash
复制
下载
openssl s_client -connect yourdomain.com:443 -showcerts
输出应显示完整的证书链(站点证书 + 中间证书)。
2. TLS 协议与加密套件
最低 TLS 1.2(微信强制要求,TLS 1.0/1.1 已被禁用)。
禁用不安全的加密套件(如 RC4、DES、MD5)。
推荐配置(以 Nginx 为例):
nginx
复制
下载
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers on;
3. SNI 支持
若服务器托管多个域名,需开启 SNI(Server Name Indication)。
三、服务器配置示例
Nginx 配置
nginx
复制
下载
server {
listen 443 ssl;
server_name api.example.com;
ssl_certificate /path/ssl/fullchain.pem; # 站点证书 + 中间证书
ssl_certificate_key /path/ssl/private.key; # 私钥
协议与加密套件
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
其他配置...
}
Tomcat 配置(server.xml)
xml
复制
下载
运行
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateFile="/path/ssl/fullchain.pem"
certificateKeyFile="/path/ssl/private.key"
type="RSA" />
</SSLHostConfig>
</Connector>
四、验证与测试
1. 在线检测工具
SSL Labs (SSLTools):检查评分是否为 A 或 A+。
MySSL:检测证书链完整性及协议支持。
2. 微信开发者工具
在真机调试或预览时,若证书配置错误,控制台会报错:
"request:fail ssl hand shake error" 或 "certificate expired"。
3. 命令行验证
bash
复制
下载
curl -I
https://api.example.com
若无报错且返回 HTTP 200/OK 则正常
五、常见问题排查
小程序无法请求后端接口,证书链不完整,重新下载并合并中间证书.
安卓设备访问失败,缺乏 SNI 支持,升级服务器软件并启用 SNI.
iOS 正常但安卓失败,服务器未启用 TLS 1.2+,强制配置 ssl_protocols TLSv1.2.
证书过期,未及时续期,设置自动续期提醒.
六、最佳实践
1. 自动化续期
使用 Let's Encrypt 证书并通过 certbot 设置自动续期(90天有效期)。
2. OCSP Stapling 启用
提升握手速度,减少客户端验证延迟(Nginx 中配置 ssl_stapling on;)。
3. HTTP 严格传输安全(HSTS)
响应头添加 Strict-Transport-Security 强制浏览器使用 HTTPS:
nginx
复制
下载
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
总结一下:微信小程序的 SSL证书 配置核心在于 证书链完整、TLS 1.2+ 支持、域名匹配。部署后务必通过 SSL Labs 进行 A 级评分验证,并定期监控证书有效期。遇到问题优先检查证书链和协议兼容性,多数故障可快速定位解决。