解决微信小程序要求的TLS版本必须大于等于1.2的问题
一、环境:#
CentOS 6.8
nginx 1.6.0
php 7.0.10
二、背景#
最近开发一个小程序,而小程序对后台接口服务器的要求是:
1、请求域名在
request合法域名
中
2、基于 https 协议
3、TLS 版本 1.2+
1、2 两条都满足了,但是第三条亟待解决,导致小程序调用接口时报错:
三、正文#
(1)为什么要满足 TLS 版本 1.2+ ?#
2017年1月1日起,苹果强制所有 app 满足 HTTPS,即 iOS9 推出的 App Transport Security (ATS) 特性。
访问 https://www.qcloud.com/product/ssl#userDefined10 ,
输入域名,检查您的 iOS app 是否满足 ATS 特性:
报错了,提示不支持 TLS1.2。
(2)如何满足 TLS 版本 1.2+ ?#
1、openSSL 版本 1.0.1+
查看 openSSL 版本:
openssl version -a
2、nginx 版本为 0.7.65,0.8.19 及更高版本
查看 nginx 版本:
nginx -V
结果是,我的版本都符合要求。
(3)nginx 配置 TLS1.2#
本人申请的是腾讯云的安全证书,官方有提供 nginx 如何配置的文档:
https://www.qcloud.com/document/product/400/6973#1.nginx-.E8.AF.81.E4.B9.A6.E9.85.8D.E7.BD.AE
配置 nginx.conf
支持 TLS1.2 的方法如下(看 ssl_protocols 参数):
server {
listen 443;
server_name www.domain.com; #填写绑定证书的域名
ssl on;
ssl_certificate 1_www.domain.com_bundle.crt;
ssl_certificate_key 2_www.domain.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
ssl_prefer_server_ciphers on;
location / {
root html; #站点目录
index index.html index.htm;
}
}
四、遇到的问题#
按照上文一切都做完之后,发现还是不行。
折腾好久之后。
发现,原来是 nginx 之前有配另一个 https 的 server,关于
ssl_protocols 的参数值为:
ssl_protocols SSLv2 SSLv3 TLSv1;
里面根本没有包含 TLSv1.2!从而影响了我们这个 server!
所以把改成:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
再测试:
完美。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具