Alamofire 如何配置 Info.plist 连接本地自签名证书服务?

发布时间:2026/9/10 10:43:55
Alamofire 如何配置 Info.plist 连接本地自签名证书服务? Alamofire 如何配置 Info.plist 连接本地自签名证书服务【免费下载链接】AlamofireElegant HTTP Networking in Swift项目地址: https://gitcode.com/GitHub_Trending/al/Alamofire如果你的 App 使用 Alamofire 连接本机localhost上运行、且使用自签名证书的 HTTPS 服务请求往往会一直失败并持续出现CFNetwork SSLHandshake failed (-9806)错误。Documentation/AdvancedUsage.md 的 “App Transport Security” 章节指出从 iOS 9 引入 App Transport SecurityATS之后ATS 会覆盖整个挑战challenge体系导致你用自定义ServerTrustManager配置的各种ServerTrustEvaluating对象很可能不生效——除非你在 App 的 plist 中把 ATS 配置成“弱化到足以让 App 自己评估服务器信任”的程度。用自签名证书时遇到这个问题的概率尤其高。本文的任务就是按文档给出的配置修改你的 AppInfo.plist让本地自签名证书服务的连接恢复正常。先确认你遇到的确实是 ATS 覆盖问题文档给出的判断依据是错误现象本身如果你持续看到CFNetwork SSLHandshake failed (-9806)大概率就是 ATS 在你的自定义服务器信任评估生效之前拦截了握手。对应的前提条件是目标服务运行在 localhost 上服务使用自签名证书即使已配置ServerTrustManager错误依旧出现。如果握手没有反复报-9806说明问题可能不在此处本文的配置不保证解决你的场景。在 App 的 Info.plist 中添加 NSAppTransportSecurity 配置要修改的文件是你自己 App 工程的Info.plist仓库中示例工程对应 Example/Resources/Info.plist该文件默认没有ATS 相关键可以直接参照它的结构插入。把下面这个NSAppTransportSecurity字典加入Info.plist的根dict中dict keyNSAppTransportSecurity/key dict keyNSAllowsLocalNetworking/key true/ /dict /dict文档说明了这个键的作用将NSAllowsLocalNetworking设为YES后App 可以加载本地资源同时不必为 App 的其余部分整体关闭 ATS——也就是说这是针对本地网络的例外放行而不是全局关闭安全策略。用 nscurl 诊断还需要哪些 ATS 覆盖项NSAllowsLocalNetworking覆盖本地网络这一场景之外文档还给出了一个通用的诊断手段使用nscurl工具的--ats-diagnostics选项对目标 host 执行一系列测试查看该 host 究竟需要哪些 ATS 覆盖项。如果你的本地服务只落在本地网络例外之内上面的配置通常就够了如果诊断显示还需要其他覆盖项再按诊断结果向NSAppTransportSecurity中补充相应的键。可选同时用 Alamofire 固定这张自签名证书放开了 ATS 对本地网络的限制只是让握手指向你的信任评估逻辑如果想显式校验这张自签名证书本身可以在 Alamofire 侧配合证书固定。文档在 “Security” 章节说明PinnedCertificatesTrustEvaluator也可以接受自签名证书做法是给Session挂一个ServerTrustManagerlet manager ServerTrustManager(evaluators: [localhost: PinnedCertificatesTrustEvaluator()]) let session Session(serverTrustManager: manager)注意文档同时提醒ServerTrustManager默认要求所有 host 都有对应评估器未映射的 host 会产生错误上面的示例只映射了localhost其他 host 的请求会报错如有需要按同样方式补充映射。限制与版本边界文档在 “Adding aServerTrustManager” 一节中明确建议部署到iOS 14、tvOS 14、watchOS 7 或 macOS 11 及以上的项目Apple 已提供可在 AppInfo.plist中配置的内置固定pinning能力应优先使用该能力再考虑用 Alamofire 自行实现。NSAllowsLocalNetworking只放行本地资源的加载对 App 其余流量的 ATS 约束保持不变这一点文档有明确说明配置后不要误认为 ATS 已被整体关闭。完成配置的核对方式以文档描述的判断为准此前持续出现的CFNetwork SSLHandshake failed (-9806)不再出现且nscurl --ats-diagnostics对目标 host 的诊断结果与你的 plist 覆盖项相匹配。更多背景各类ServerTrustEvaluating评估器的行为、ServerTrustManager的主机匹配规则、子类化扩展可继续阅读 Documentation/AdvancedUsage.md 的 “Security” 与 “App Transport Security” 小节。【免费下载链接】AlamofireElegant HTTP Networking in Swift项目地址: https://gitcode.com/GitHub_Trending/al/Alamofire创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询