在使用 acme.sh 生成免费证书 后,如果你的小程序访问域名时出现:
error_msg: net::ERR_SSL_VERSION_OR_CIPHER_MISMATCH说明 SSL 协议或证书链 配置出现问题,小程序无法建立 HTTPS 连接。
以下是常见原因与解决方案。
1. acme.sh 生成的是 EC(ECC) 证书,小程序不支持
部分旧设备或特定网络环境对 ECDSA 证书支持不足,需要 RSA 证书。
错误证书示例:
证书类型:ECC 256bit解决方法:改用 RSA 证书(推荐)。
2. Nginx 配置使用了过低或过高的 TLS 版本
微信小程序最低要求支持:
如果你设置成:
ssl_protocols TLSv1.3;小程序会直接报错。
3. 缺少 fullchain 证书链(最常见)
如果 Nginx 使用了错误的证书文件:
ssl_certificate /path/to/cert.pem; 微信小程序会在验证证书链时失败。
你必须使用:
ssl_certificate /path/to/fullchain.cer;
4. 使用了不兼容的小程序加密套件
加密套件过于严格也会导致小程序无法连接。
生成 RSA 证书(推荐)
#生成证书(默认是RSA 证书,可以不写后面的参数)
acme.sh --issue -d yourdomain.com --dns dns_ali
# 生成 RSA 证书(指定RSA)
acme.sh --issue -d yourdomain.com --keylength 2048
# 生成 ECC 证书(指定ECC)
acme.sh --issue -dyourdomain.com --keylength ec-256 --ecc
安装证书(Nginx 示例)
acme.sh --install-cert -d yourdomain.com \
--key-file /etc/nginx/ssl/yourdomain.key \
--fullchain-file /etc/nginx/ssl/yourdomain.pem\
--reloadcmd "systemctl reload nginx"ssl_certificate /etc/nginx/ssl/yourdomain.pem;
ssl_certificate_key /etc/nginx/ssl/yourdomain.key;
# 必须包含 TLS1.2
ssl_protocols TLSv1.2 TLSv1.3;
# 兼容广泛的小程序加密套件
ssl_ciphers HIGH:!aNULL:!MD5:!EXP:!RC4:!DES:!3DES;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;openssl s_client -connect yourdomain.com:443 -servername yourdomain.com如果出现:
Verify return code: 21 (unable to verify the first certificate)说明你没有使用 fullchain.cer。
你可以用 SSL Labs(免费):
https://www.ssllabs.com/ssltest/重点检查:
| 问题 | 影响 | 解决方式 |
|---|---|---|
| 使用 ECC 证书 | 小程序可能不支持 | 换 RSA |
| 未使用 fullchain | 无法验证证书链 | 使用 fullchain.cer |
| TLS 设置不兼容 | 小程序无法访问 | 启用 TLS1.2 |
只要你做到 RSA + fullchain + TLS1.2,小程序一定能正常访问。
输入您的网址查询是否授权