ssl新闻资讯

文档中心

Moya涓嶆鏌SL璇佷功锛熷皬蹇冧綘鐨勬暟鎹湪瑁稿锛?txt

时间 : 2025-09-27 16:25:23浏览量 : 1

2Moya涓嶆鏌SL璇佷功锛熷皬蹇冧綘鐨勬暟鎹湪瑁稿锛?txt

在移动开发中,网络请求库是连接App与服务器的桥梁。Moya作为Swift语言中流行的网络抽象层,因其简洁的API设计备受开发者喜爱。但最近有开发者发现:“Moya默认不验证SSL证书”,这相当于让你的数据在互联网上“裸奔”!本文将用实际案例和通俗比喻,带你理解风险原理、攻击场景以及如何加固防御。

一、SSL证书是什么?为什么需要检查?

想象你要给朋友寄一封机密信件。SSL证书就像邮局的“防拆封印章”——它确保:

1. 对方身份真实(证明收件人确实是你的朋友,不是骗子冒充的)。

2. 传输过程加密(信件内容被锁在保险箱里运输)。

如果Moya不检查SSL证书,相当于:

- 你直接把信交给路边自称“邮递员”的陌生人(中间人攻击风险)。

- 保险箱的钥匙就挂在箱子上(加密可能被破解)。

?? 真实案例:

2025年某银行App因未校验SSL证书,黑客伪造Wi-Fi热点截获用户登录密码,导致数百人资金被盗。

二、Moya为什么不默认检查SSL证书?

Moya底层依赖Alamofire进行网络请求。出于灵活性考虑,Alamofire默认的`ServerTrustPolicy`是`.performDefaultEvaluation`(仅验证域名是否匹配),但不会验证证书是否由可信机构签发、是否过期或被吊销

?? 代码示例(危险配置):

```swift

let provider = MoyaProvider() // 默认不严格校验证书

```

三、攻击者如何利用这一点?

场景1:公共Wi-Fi钓鱼

黑客在咖啡厅部署恶意Wi-Fi,拦截所有流量。如果你的App使用Moya且未校验SSL证书:

- 黑客可以伪造一个假银行服务器(如`https://fake-bank.com`)。

- App会直接与假服务器通信,泄露账号密码。

场景2:企业内网渗透

企业内部测试环境常使用自签名证书。如果员工手机安装了未校验证书的App:

- 攻击者通过恶意链接诱导连接公司VPN。

- 劫持App请求到伪装的测试服务器,窃取内部数据。

四、如何修复?4种加固方案

方案1:强制校验可信CA颁发的证书(推荐)

let manager = ServerTrustManager(evaluators: [

"yourdomain.com": PinnedCertificatesTrustEvaluator()

])

let provider = MoyaProvider(session: Session(serverTrustManager: manager))

? 效果:只接受正规CA(如DigiCert、Let's Encrypt)签发的有效证书。

方案2:证书绑定(Certificate Pinning)

let evaluator = PublicKeysTrustEvaluator() // 只匹配预置的公钥

let manager = ServerTrustManager(evaluators: ["yourdomain.com": evaluator])

? 效果:即使黑客伪造了相同域名的证书,只要公钥不匹配就会拒绝连接。

?? 实际应用:

微信、支付宝等金融类App普遍采用此策略。

方案3:自签名证书的特殊处理

如果是企业内网服务:

let evaluator = DefaultTrustEvaluator(validateHost: true)

evaluator.pinnedCertificates = [SecCertificate]() // 加载你的自签名证书

?? 注意:需确保自签名证书通过安全渠道分发(如MDM推送)。

方案4:运行时动态检测(进阶)

通过Hook网络请求监听异常行为:

// Swift示例:检测到非预期根证书时触发告警

NotificationCenter.default.addObserver(

forName: .SSLCertificateUntrusted,

object: nil,

queue: .main) { _ in

alert("检测到不安全连接!")

}

五、测试你的防护是否生效?

1. 工具验证

- 用Burp Suite或Charles抓包工具代理App流量。

- 预期结果:应无法解密HTTPS通信或触发错误提示。

2. 代码扫描

```bash

grep -r "ServerTrustPolicy" . | grep -v "performDefaultEvaluation"

```

确保关键域名没有使用宽松策略。

忽略SSL证书检查就像给家门装了指纹锁却从不关门。对于金融、医疗等敏感类App,务必采用“零信任”策略。技术决策背后永远是安全与体验的平衡——但在这里,安全必须是那个更重的砝码。

> ?? 延伸阅读建议

> - OWASP Mobile Top 10:[M3-Insecure Communication](https://owasp.org/www-project-mobile-top-10/)

> - Apple官方文档:[NSURLSession TLS最佳实践](https://developer.apple.com/documentation/security/preventing_insecure_network_connections)

TAG:moya 不检查ssl证书,