当前位置: 首页 > news >正文

wordpress 视频压缩网站排名优化seo

wordpress 视频压缩,网站排名优化seo,重庆江津网站建设,wordpress 电商 开发NSURLSession 与 NSURLAuthenticationMethodServerTrust —— 从零开始的“服务器信任质询”全流程 目标读者#xff1a;刚接触 iOS 网络开发、准备理解 HTTPS 与证书校验细节的同学 出发点#xff1a;搞清楚为什么会有“质询”、质询的触发时机、以及在 delegate 里怎么正确…NSURLSession 与 NSURLAuthenticationMethodServerTrust —— 从零开始的“服务器信任质询”全流程 目标读者刚接触 iOS 网络开发、准备理解 HTTPS 与证书校验细节的同学 出发点搞清楚为什么会有“质询”、质询的触发时机、以及在 delegate 里怎么正确地处理它。 1. 质询到底是什么 当 URLSession 发现需要某种额外凭据credential才能继续网络交互时会暂停请求并向你抛出 authentication challenge。对 HTTPS 来说最常见的触发类型就是 NSURLAuthenticationMethodServerTrust 服务器把 X.509 证书链塞进 TLS 握手。 客户端iOS TLS 实现 ATS 默认策略检查 证书是否在有效期、是否被吊销证书链是否能追溯到系统或配置的受信根 CA证书的 CN/SAN 是否与请求的 host 完全匹配。 如果 全部 检查都能自动通过URLSession 不会打扰你——直接走默认证书校验并继续请求。 只要 你实现了 session-level delegate 方法 urlSession(_:didReceive:completionHandler:)系统就会把步骤 2 的工作“交卷”给你——即使校验本来能自动通过。 所以不实现该 delegate 自动信任系统 CA ATS 默认策略实现 delegate 你必须亲自裁定是否信任。 2. 质询出现的典型场景 场景为什么会收到质询你通常怎么做生产环境使用合法证书Let’s Encrypt、GlobalSign…你自己实现了 delegate但只是想保留系统默认验证再次调用 SecTrustEvaluateWithError通过则 .useCredential内网/测试环境 使用自签名证书系统根证书链里找不到颁发者把自签根证书预装到 App Bundle 并做自定义信任做 SSL Pinning证书/公钥固定你想缩短信任链拒绝被“合法”但非预期的 CA 篡改手动比对二进制证书或公钥哈希然后再决定是否信任使用 HTTP 抓包工具 (Charles、mitmproxy)代理伪造服务器证书除非你安装其证书为根 CA开发调试时允许 Charles 证书上线包一定要拒绝 3. 基础实现Swift 5 /// 在创建 URLSession 时指定 delegate而不是用 URLSession.shared let session URLSession(configuration: .default,delegate: self,delegateQueue: nil)extension YourNetworkManager: URLSessionDelegate {/// 系统对“服务器信任”发起的质询都会走到这里func urlSession(_ session: URLSession,didReceive challenge: URLAuthenticationChallenge,completionHandler: escaping (URLSession.AuthChallengeDisposition, URLCredential?) - Void) {guard challenge.protectionSpace.authenticationMethod NSURLAuthenticationMethodServerTrust,let serverTrust challenge.protectionSpace.serverTrust else {// 交给系统默认处理例如 HTTP Basic、客户端证书等completionHandler(.performDefaultHandling, nil)return}// 1️⃣ 让系统再跑一次标准评估if SecTrustEvaluateWithError(serverTrust, nil) {let credential URLCredential(trust: serverTrust)completionHandler(.useCredential, credential) // 继续请求} else {completionHandler(.cancelAuthenticationChallenge, nil) // 终止}} }iOS 13- 及更早版本用 SecTrustEvaluateiOS 13 强烈建议改用 SecTrustEvaluateWithError 以拿到 CFError 信息并避免阻塞 main thread。 Objective-C 版本简化 - (void)URLSession:(NSURLSession *)sessiondidReceiveChallenge:(NSURLAuthenticationChallenge *)challengecompletionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential * _Nullable))completionHandler {if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {SecTrustRef trust challenge.protectionSpace.serverTrust;if (SecTrustEvaluateWithError(trust, NULL)) {NSURLCredential *cred [NSURLCredential credentialForTrust:trust];completionHandler(NSURLSessionAuthChallengeUseCredential, cred);} else {completionHandler(NSURLSessionAuthChallengeCancelAuthenticationChallenge, nil);}return;}completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, nil); }4. 深入自签名证书与 SSL Pinning 4.1 只信任 Bundle 中的根证书 if let certPath Bundle.main.path(forResource: myRootCA, ofType: cer),let certData try? Data(contentsOf: URL(fileURLWithPath: certPath)),let rootCert SecCertificateCreateWithData(nil, certData as CFData) {SecTrustSetAnchorCertificates(serverTrust, [rootCert] as CFArray)SecTrustSetAnchorCertificatesOnly(serverTrust, true)if SecTrustEvaluateWithError(serverTrust, nil) {completionHandler(.useCredential, URLCredential(trust: serverTrust))} else {completionHandler(.cancelAuthenticationChallenge, nil)} }SecTrustSetAnchorCertificatesOnlytrue 的效果是“把系统根 CA 全部踢出仅信任我给定的这一束证书”。 4.2 公钥 Pinning效率更高证书续期更灵活 guard let serverTrust challenge.protectionSpace.serverTrust else { ... } guard SecTrustEvaluateWithError(serverTrust, nil) else { ... }let serverPublicKey SecTrustCopyKey(serverTrust)! let serverKeyData SecKeyCopyExternalRepresentation(serverPublicKey, nil)! as Data let serverKeyHash SHA256(serverKeyData) // 自己写或 CryptoKitif pinnedHashes.contains(serverKeyHash) {completionHandler(.useCredential, URLCredential(trust: serverTrust)) } else {completionHandler(.cancelAuthenticationChallenge, nil) }5. 典型错误排查清单 现象根因快速定位Code -999 “已取消”你在 delegate 里返回了 .cancelAuthenticationChallenge 或 .rejectProtectionSpace打断点检查 challenge.protectionSpaceCode -1200 “SSL error”证书链无效 / ATS 阻止弱加密观察 Console中会打印 ATS policy requires...Charles 无法抓包ATS 拒绝了 Charles 证书或你启用了 Pinning临时将 NSExceptionDomains 加入 Info.plist或关闭 Pinning偶发 ServerTrust 失败服务器有多个证书链、SNI/host 不一致手动访问 https://host 用 openssl s_client -servername host -connect ip:443 6. 最佳实践速览 不做弱校验。切勿直接 .useCredential 而不跑 SecTrustEvaluateWithError那等同于“信任一切”上线会被审核拒绝。Pin 公钥而非整张证书减少因证书续期频繁发版。按需配置 ATS。绝大多数生产 HTTPS 服务都可以满足 ATS 默认要求TLS 1.2、至少 RSA 2048 或 ECC 256 、SHA-256 签名。调试与上线严格隔离。把抓包例外、测试根证书全部写在 #if DEBUG ... #endif 分支中。 结语 NSURLAuthenticationMethodServerTrust 看似只是“系统多问一句你到底信不信任这台服务器”但背后承载的是 PKI、TLS 乃至你 App 用户的数据安全。真正的安全措施都在“默认正确”与“最小权限” 默认让系统校验一切只有当你非常确定要改时才介入并且介入后要保证比系统 更严格 而不是更松。 掌握这些基础你就能轻松向自签环境、抓包调试甚至 SSL Pinning 过渡也能对任何“为什么连接被取消”作出快速诊断。愿你写出的每一行网络代码都能经得起安全审计与真实攻击的考验。
http://www.zqtcl.cn/news/769263/

相关文章:

  • 深圳网站关键词优化推广做mod游戏下载网站
  • 通达oa 做网站wordpress动转换标签别名
  • 三亚学做网站培训招聘网站排名
  • 企业网站建设费用需要多少钱怎样下载建设银行信用卡网站
  • 厦门建网站公司怎么做服装外贸网站
  • 做淘宝客网站用什么程序好仿站下载工具
  • 网站地图开发国家住房和城乡建设部中国建造师网站
  • 巫山网站建设泉州市培训建设系统中心网站
  • 网站开发国内外研究背景室内设计师收入高吗
  • 深圳网站维护一般多少钱沈阳做网站黑酷科技
  • 汽车营销服务网站建设怎样申请微信公众号个人
  • 阿里云 做网站北京工程建设交易中心网站
  • 网站备案安全承诺书竞价外包推广专业公司
  • 如何做公司网站广西住建厅八大员报名网站
  • 以下不是网站开发语言的哪项工信部域名备案管理系统
  • 优化网站搭建创业项目网站建设规划
  • 温岭网站开发网站建设程序文件
  • 有什么网站可以做深圳初二的试卷练习商城网站功能
  • 网站托管就业新闻今天的最新新闻
  • 重庆网站建设方案书国外做电商平台的网站有什么
  • 微信扫一扫登录网站如何做网络平台怎么弄
  • 怎么做网页模板展示网站株洲网红餐厅
  • 优秀学校网站设计正规抖音代运营公司排名
  • 网站的网站建设公司太原中小企业网站制作
  • 北京网站建设搜q.479185700模特公司网站模板
  • 网站设置什么意思wordpress 专题页面
  • 网站推广要具备什么购物网站多少钱
  • 重庆免费做网站在线做ppt
  • wordpress固定链接设置404阳江seo优化
  • 响应网站模板下载wordpress恢复网站