微信对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 级评分验证,并定期监控证书有效期。遇到问题优先检查证书链和协议兼容性,多数故障可快速定位解决。