iOS下自签名证书WSS无法自动连接的解决方案咨询
我之前在企业内网项目里碰到过一模一样的问题,下面是几个经过实践验证、能让iOS自动信任WSS连接的方案,你可以根据自己的环境选择:
可行解决方案汇总
方案1:企业MDM推送自定义CA证书(完全自动)
如果你们是企业内网环境,有MDM(移动设备管理)系统的话,这是最优解:
- 先搭建一个内部CA(证书颁发机构),用这个CA给内网的
test.local域名签发SSL证书 - 通过MDM将这个自定义CA证书批量推送到所有iOS设备,设备会自动信任该CA签发的所有证书
- 完成后,iOS客户端连接
wss://test.local时,系统会自动通过证书验证,全程不需要用户手动操作
方案2:外网合法域名做WSS桥接(无需修改设备)
如果没有MDM支持,这个方案更通用,核心是用一个带公网可信证书的域名做中间转发:
- 准备一个公网可访问的域名(比如
bridge.yourcompany.com),从Let's Encrypt申请免费的可信SSL证书 - 在这个公网服务器上部署WSS反向代理,把
wss://bridge.yourcompany.com的请求转发到内网的wss://test.local服务 - iOS客户端直接连接这个公网桥接地址,因为证书是公网权威机构签发的,iOS会自动信任,无需任何额外配置
这里给一个Nginx的反向代理配置示例:
server { listen 443 ssl; server_name bridge.yourcompany.com; # 配置公网可信证书 ssl_certificate /etc/letsencrypt/live/bridge.yourcompany.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/bridge.yourcompany.com/privkey.pem; location / { # 转发到内网WSS服务 proxy_pass wss://test.local; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
注意:要确保公网服务器能访问到内网的
test.local服务,可通过VPN或者内网穿透实现;如果是纯内网环境,也可以把桥接服务器部署在内网,只要iOS设备能解析到桥接服务器的内网IP,且证书是公网可信的即可
方案3:内网DNS+CA证书引导安装(半自动)
如果不想依赖公网服务器,还可以用这个方案:
- 搭建内部CA并给
test.local签发证书 - 在内网部署一个简单网页,提供CA证书的下载链接(iOS设备访问该网页后,点击证书文件即可完成安装,仅需一次操作)
- 配置内网DNS服务器,让iOS设备能正确解析
test.local的内网IP
这个方案适合用户都是内部员工的场景,首次安装后后续连接都是自动的
不推荐的方案
- 越狱修改系统信任设置:仅适合个人测试,完全不适合生产环境,且当前iOS版本越狱难度极高
- 客户端跳过证书验证:虽然很多SDK支持关闭证书校验,但这会彻底丧失WSS的安全性,违反项目要求,绝对不建议使用
内容的提问来源于stack exchange,提问作者Suneet Jain
相关产品推荐
相关产品推荐

