还在挑云服务器?小程序后端HTTPS没配好真不敢下单

很多刚准备搭小程序后端的朋友卡在同一个地方:云服务器买好了,域名也准备好了,但一想到HTTPS配置就犹豫——证书要钱吗?流程复杂吗?会不会耽误上线?

其实,只要选对证书类型、走对验证路径,免费SSL证书完全能支撑小程序合法域名要求。下面是一套经验证、可复现、不依赖备案、不依赖特定服务商后台的通用部署路径。

一、小程序对HTTPS证书的硬性技术要求(非政策性,纯协议层)

微信小程序官方文档明确要求:所有调用 wx.request 的域名必须启用 HTTPS,且服务端需满足以下三项基础协议能力:

  • 证书必须由受信任的 CA 签发(免费 DV 类证书满足);
  • 域名必须与证书中 Subject Alternative Name (SAN) 完全匹配(支持通配符或精确二级域名);
  • 服务端 TLS 协议栈必须同时启用 TLS 1.0、1.1、1.2(仅支持 1.3 或仅 1.2 均可能触发小程序连接失败)。

二、免费证书申请全流程(以主流云平台通用逻辑为准)

以下步骤基于真实控制台交互逻辑整理,不绑定任何厂商名称,所有操作均可在主流云服务商 SSL 证书控制台复现:

  1. 登录云平台控制台,搜索“SSL证书”或“证书管理”,进入证书服务首页;
  2. 点击“申请免费证书”,进入申请向导;
  3. 填写待保护域名(如 api.example.com),注意:不能填写 IP、localhost、带端口的地址
  4. 选择验证方式:推荐 DNS 验证(无需停机、无需改服务器配置);
  5. 系统生成一条 TXT 记录,格式为:_acme-challenge.api.example.com → xxxxxxxx
  6. 前往域名 DNS 解析后台,添加该 TXT 记录(主机名填 _acme-challenge.api,记录值粘贴完整);
  7. 提交后等待 2–5 分钟,平台自动轮询验证,状态变为“已签发”即成功;
  8. 点击“下载”,获取四类文件:1_root_bundle.crt2_api.example.com.crt3_api.example.com.keycertificate.pem(部分平台提供 Nginx/Apache/IIS 专用包)。

三、Nginx 服务器部署 HTTPS(实操命令级步骤)

假设你已安装 Nginx(1.18+),且后端服务监听在 http://127.0.0.1:8080

  1. 上传证书文件至服务器(如 /etc/nginx/ssl/ 目录);
  2. 确认私钥无密码(如含密码,用 openssl rsa -in 3_api.example.com.key -out 3_api.example.com.key.nopass 去密);
  3. 编辑站点配置:sudo nano /etc/nginx/conf.d/api.example.com.conf
  4. 写入以下标准 HTTPS server 块(含 TLS 版本兼容):
server {
    listen 443 ssl http2;
    server_name api.example.com;

    ssl_certificate /etc/nginx/ssl/2_api.example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/3_api.example.com.key.nopass;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

server {
    listen 80;
    server_name api.example.com;
    return 301 https://$host$request_uri;
}
  1. 检查语法:sudo nginx -t,输出 success 后重载:sudo nginx -s reload
  2. 用浏览器访问 https://api.example.com,确认锁图标正常、无证书警告;
  3. 用 curl 验证 TLS 版本支持:curl -I --tlsv1.0 https://api.example.comcurl -I --tlsv1.1 https://api.example.comcurl -I --tlsv1.2 https://api.example.com,三者均应返回 200301

四、免费版 vs 付费版证书能力对比(基于公开技术规范)

能力项 免费 DV 证书 付费 OV/EV 证书
域名验证方式 DNS 或 HTTP 文件验证(自动化) 需人工审核企业资质(3–5 个工作日)
支持域名数量 单域名或主域名+1个子域名(如 api.example.com + www.example.com) 支持 SAN 多域名(最多 100+)、通配符(.example.com)
证书有效期 12 个月(到期前可重新申请) 12–24 个月(部分支持自动续签)
小程序兼容性 完全兼容(微信校验仅认 CA 信任链与域名匹配) 完全兼容
客户端信任度 所有主流浏览器、微信、支付宝、iOS/Android 系统均预置信任 同左,无感知差异

五、小程序合法域名配置前必验三项

证书部署完成后,微信小程序后台添加域名前,请务必本地验证以下三项(避免因配置遗漏导致反复提交):

  • 用手机微信打开 https://api.example.com,确认页面可访问且地址栏显示“安全”标识;
  • 用开发者工具“网络”面板抓包,确认 wx.request 请求返回状态码为 200,且响应头含 Content-Type
  • 在服务器执行:openssl s_client -connect api.example.com:443 -tls1_2,输出中应含 Protocol : TLSv1.2 且无 verify error

常见问题 FAQ

问题 解答
免费证书能用在多个子域名上吗? 单张免费证书通常支持 1 个主域名 + 1 个子域名(如 example.com 和 api.example.com)。如需更多,需分别申请或选用通配符证书(通常为付费)。
证书到期了怎么办? 到期前 30 天可重新走一遍申请流程(DNS 记录无需变更),下载新证书替换即可,全程无需停机。
为什么小程序提示“不在合法域名列表”? 请确认:① 域名已填入小程序后台“request 合法域名”;② 该域名解析 A 记录指向你的云服务器;③ 服务器 Nginx/Apache 已监听 443 端口并加载证书;④ 未使用 localhost、127.0.0.1 或带端口的地址。
Windows Server 2008 R2 能部署吗? 可以,但需手动启用 TLS 1.0/1.1/1.2(通过注册表修改 SCHANNEL 策略),Windows Server 2012 及以上默认支持。
证书申请后一直“待验证”怎么办? 检查 DNS TXT 记录是否已全球生效(可用 dig -t txt _acme-challenge.api.example.com 验证);部分 DNS 提供商缓存较长,可等待 10 分钟再刷新控制台。
厂商 配置 适用 价格 购买地址
腾讯云 2核2G4M 低负载应用适配,全年稳定陪伴 99元/年 立即购买
腾讯云 2核4G5M 个人专享,超强性能加持 188元/年 立即购买
腾讯云 4核4G3M 建站、Web应用、电商独立站等高性价比选择 79元/年 立即购买
腾讯云 2核2G3M 适合小型网站、小程序和Web开发场景 68元/年 立即购买
腾讯云 2核4G6M 网站和小程序开发,快速部署、极简体验 528元/3年 立即购买
腾讯云 4核8G5M 适合业务规模较大的场景,中小企业首选 450元/年 立即购买

所有价格仅供参考,请以官方活动页实时价格为准。