苹果ATS安全标准之HTTPS 证书验证浅析(下)

便宜SSL1年前 (2021-08-06)便宜SSL知识310

三、iOS实现支持HTTPS

在OC中当使用NSURLConnection或NSURLSession建立URL并向服务器发送https请求获取资源时,服务器会使用HTTP状态码401进行响应(即访问拒绝)。此时NSURLConnection或NSURLSession会接收到服务器需要授权的响应,当客户端授权通过后,才能继续从服务器获取数据。如下图所示:

非自签名证书验证实现

在接收到服务器返回的状态码为401的响应后,对于NSURLSession而言,需要代理对象实现URLSession:task:didReceiveChallenge:completionHandler:方法。对于NSURLConnection而言,需要代理对象实现connection:willSendRequestForAuthenticationChallenge: 方法(OS X v10.7和iOS5及以上),对于早期的版本代理对象需要实现代理对象要实现connection:canAuthenticateAgainstProtectionSpace:和connection:didReceiveAuthenticationChallenge:方法。代码如下(参考文档):

当客户端发送https请求后,服务器会返回需要授权的相关信息,然后connection:willSendRequestForAuthenticationChallenge:方法被调用。客户端根据返回的challenge信息,首先获取需要验证的信任对象trust,然后调用SecTrustEvaluate方法是用系统默认的验证方式对信任对象进行验证,当验证通过时,使用该信任对象trust生成证书凭证,然后self.connection使用该凭证继续连接。如下详解:

NSURLAuthenticationChallenge包含如下信息:

  • error :最后一次授权失败的错误信息

  • failureResponse :最后一次授权失败的错误信息

  • previousFailureCount :授权失败的次数

  • proposedCredential :建议使用的证书

  • protectionSpace :NSURLProtectionSpace对象,代表了服务器上的一块需要授权信息的区域。包括了服务器地址、端口等信息。在此指的是challenge.protectionSpace。其中Auth-scheme指protectionSpace所支持的验证方法,NSURLAuthenticationMethodServerTrust指对protectionSpace执行证书验证。

  • sender:发送者,在此指的是self.connection

SecTrustRef

表示需要验证的信任对象(Trust Object),在此指的是challenge.protectionSpace.serverTrust。包含待验证的证书和支持的验证方法等。

SecTrustResultType

表示验证结果。其中 kSecTrustResultProceed表示serverTrust验证成功,且该验证得到了用户认可(例如在弹出的是否信任的alert框中选择always trust)。 kSecTrustResultUnspecified表示 serverTrust验证成功,此证书也被暗中信任了,但是用户并没有显示地决定信任该证书。 两者取其一就可以认为对serverTrust验证成功。

SecTrustEvaluate

函数内部递归地从叶节点证书到根证书验证。使用系统默认的验证方式验证Trust Object,根据上述证书链的验证可知,系统会根据Trust Object的验证策略,一级一级往上,验证证书链上每一级证书有效性。

NSURLCredential

表示身份验证证书。URL Lodaing支持3种类型证书:password-based user credentials, certificate-based user credentials, 和certificate-based server credentials(需要验证服务器身份时使用)。因此NSURLCredential可以表示由用户名/密码组合、客户端证书及服务器信任创建的认证信息,适合大部分的认证请求。对于NSURLCredential也存在三种持久化机制:

  • NSURLCredentialPersistenceNone :要求 URL 载入系统 “在用完相应的认证信息后立刻丢弃”。

  • NSURLCredentialPersistenceForSession :要求 URL 载入系统 “在应用终止时,丢弃相应的 credential ”。

  • NSURLCredentialPersistencePermanent :要求 URL 载入系统 “将相应的认证信息存入钥匙串(keychain),以便其他应用也能使用。

对于已经验证通过的信任对象,客户端也可以不提供证书凭证。

  • 对于NSURLSession,传递如下之一的值给completion handler回调:

  • NSURLSessionAuthChallengePerformDefaultHandling处理请求,就好像代理没有提供一个代理方法来处理认证请求

  • NSURLSessionAuthChallengeRejectProtectionSpace拒接认证请求。基于服务器响应的认证类型,URL加载类可能会多次调用代理方法。

对于 NSURLConnection 和 NSURLDownload,在[challenge sender] 上调用continueWithoutCredentialsForAuthenticationChallenge:方法。不提供证书的话,可能会导致连接失败,调用connectionDidFailWithError:方法 ,或者会返回一个不需要验证身份的替代的URL。 如下代码:


相关文章

HTTPS网站必备的SSL证书,你真的了解吗?

2017 年 1 月起,谷歌浏览器开始把采用HTTP协议的网站标记为“不安全”网站。而早在 2014 年,谷歌就宣布他们将HTTPS/SSL纳入其搜索算法机制中,采用HTTPS/SSL安全认证的网站将会被谷歌给予更多的信任,从而有利于网站在...

nginx如何配置https证书

第一步、客户端发送请求,服务器将证书发送给客户端,证书的本质是第三方CA的私钥加密的内容,其内容是服务器的公钥。第二步、客户端接收到证书后,用操作系统和浏览器内置的CA公钥去匹配验证证书,如果能解密,说明请求的是目标网站,不是中间人。第三步...

Android手机上的SSL连接错误怎么解决?

SSL连接错误已经逐渐成为Android设备上最常见的问题之一,通常我们会收到提醒“您的连接不是私密的”、“此站点证书不受信任”等等。这些安全提示甚至会出现在最新操作系统或者当前操作系统的最新设备上,这可能会让你感到困惑,但是没关系,这篇文...

域名型通配符ssl证书的优势及申请方法

ssl证书已经成为每个站点和通讯开发所必需的技术安全产品。有了这个证书,网站的安全性可以得到提高,所以在保护网站信息安全时,企业可以申请ssl证书,然后将证书配置到网站服务器上。目前,比较流行的ssl证书之一是域名型通配符ssl证书,它有许...

性价比高的便宜SSL证书品牌有哪些?

先来看看国产品牌中有哪些便宜的SSL证书?GeoTrustGeoTrust是全球第二大数字证书品牌,是Digicert旗下中高端SSL证书品牌。GeoTrust SSL证书类型齐全,知名度高,兼容性好,签发速度快,可以为不同网站和服务器提供...

SSL证书的HTTPS服务器能防止流量劫持吗?

科学技术的发展给我们带来了许多便利,但也带来了更多的潜在威胁,因此信息安全变得越来越重要。什么是流量劫持?流量劫持是一种古老的攻击方式,比如广告弹出,已经使用很久了。很多人已经麻木了,认为流量劫持不会造成什么损失。事实上,流量劫持可以通过各...

Android 7.0关于HTTPS证书的适配讲解

对于Android N之前自定义或非CA证书的使用,一般有两种方式:自定义 X509TurstManager 和 HostnameVerifier,替换原有的 HttpsURLConnection 中的校验类。自定义方法以烂大街的转载版为主...

使用商业认证中心的证书

如果 Rational ClearQuest® 用户来自多个组织,那么您将可能想要使用商业认证中心的证书。如果某些 Rational ClearQuest 用户来自帮助您进行设计或部署的其他组织,那么您将可能希望使用商业认证中心的证书。IB...

阿里云CDN配置HTTPS证书

背景信息目前CDN仅支持PEM格式的证书。如果您的证书不是PEM格式,请进行格式转换。 说明CRT后缀文件是Certificate的简称,可能是PEM编码格式,也可能是DER编码格式。进行证书格式转换前请仔细确认您的证书格式是否需...

SSL证书申请之后的签发过程

现在的各大浏览器几乎都是支持网站安装SSL证书,从而对网站信息进行保护,而且安装SSL证书的网站对网站的SEO优化也有好处,那么购买SSL证书之后怎么签发证书呢?ssl盾小编带您了解SSL证书的签发过程。1.购买到合适的SSL证书之后,需要...

十分钟带你彻底搞明白https证书

 最近在部署kebernetes集群,为保证节点之间的通信安全,决定使用https证书认证,有些知识点有点迷糊,再梳理下。 为什么会有https       http协议,数据都是...

自签名SSL证书介绍及其缺点

标准SSL证书由受信任的证书颁发机构(CA)颁发和验证,此类证书使用信任链,其中每个证书都由更可靠的证书签名和信任,此链一直延伸到根证书。SSL证书一般需要付费使用,以致很多没有安全预算的企业选择在网站上使用免费的自签名证书。那么自签名SS...

你不在意的 HTTPS 证书吊销机制

缘起偶刷《长安十二时辰》,午睡时,梦到我穿越到了唐朝,在长安城中的靖安司,做了一天的靖安司司丞。当徐宾遇害消失的时候我不在司内,当时的情形我不得而知。后来徐宾醒了,据他描述说“通传陆三”是暗桩,险些致徐宾于死地。而擅长大案牍术的高智商人才居...

Python实现HTTPS网站证书过期监控及更新

当前HTTP逐渐被大众所抛弃,HTTPS正在成为互联网上的主流。前段时间我们维护的一个HTTPS证书即将过期,由于多云环境比较复杂,团队小伙伴在替换更新证书的过程中出现疏漏,导致有一个域名证书没有及时更新,影响了系统可用性,为了杜绝这种问题...

HTTPS 证书配置一劳永逸

HTTPS 证书相关的体系组织是一个商业团体,商人出于利益的需要,把 HTTPS 证书分为各类等级,笼统的说分收费证书和免费证书,但是无论如何技术本质是一样的,所谓收费证书就是在证书发放流程中域名校验环节严格了一些,不过最终目的还是一样,确...

迫于贫穷,求一个便宜好用的 SSL 证书

目前有一个域名需要解析二级也想用 https,迫于贫穷请大家介绍个好用又实惠的证书,谢谢了。Let's Encrypt 免费而且可以配置通配符example.com *.example.com 签同一张证书上自动更新 Le...

HTTPS 的证书过期时间是否应该缩短?

Google 向非正式 CA 行业组织 CA/B Forum 递交提议,建议将 HTTPS 证书的过期时间从 825 天减少到 397 天。设立证书过期时间是为了限制撤销证书清单的大小(有各种原因需要撤销证书),如果没有过期时间那...