iOS下使用HttpDNS进行IP直连避免DNS劫持

iOS下使用HttpDNS进行IP直连避免DNS劫持,第1张

IP直连可以避免localDNS解析导致的DNS劫持,但是在iOS中不仅仅是将host直接换成IP地址就可以了,还有以下需要注意的问题。

发送HTTPS请求首先要进行SSL/TLS握手,握手过程大致如下:

上述过程中,和HTTPDNS有关的是第3步,客户端需要验证服务端下发的证书,验证过程有以下两个要点:

如果上述两点都校验通过,就证明当前的服务端是可信任的,否则就是不可信任,应当中断当前连接。 当客户端使用HTTPDNS解析域名时,请求URL中的host会被替换成HTTPDNS解析出来的IP,所以在证书验证的第2步,会出现domain不匹配的情况,导致SSL/TLS握手不成功 。

针对 domain不匹配 问题,可以采用如下方案解决:hook证书校验过程中第2步,将IP直接替换成原来的域名,再执行证书验证。

方法为在客户端收到服务器的质询请求代理方法 -URLSession:task:didReceiveChallenge:completionHandler: 中,首先从header中获取host(第一点注意事项:HTTP请求头HOST字段设置),从header中如果没有取到host,就去URL中获取host(降级为LocalDNS解析时不进行替换),然后拿着host在自己的方法-evaluateServerTrust:forDomain:中创建SSL Policy证书校验策略,然后对证书进行校验。

SNI(Server Name Indication)是为了解决一个服务器使用多个域名和证书的SSL/TLS扩展。它的工作原理如下:

在连接到服务器建立SSL链接之前先发送要访问站点的域名(Hostname),服务器根据这个域名返回一个合适的证书。

目前,大多数操作系统和浏览器都已经很好地支持SNI扩展,OpenSSL 098也已经内置这一功能。

上述过程中,当客户端使用HTTPDNS解析域名时,请求URL中的host会被替换成HttpDNS解析出来的IP,导致SSL/TLS握手中服务器接收到的客户端发出的clientHello中的SNI为host解析后的IP,从而无法找到匹配的证书,只能返回默认的证书或者不返回,所以会出现SSL/TLS握手不成功的错误。

比如当你需要通过HTTPS访问CDN资源时,CDN的站点往往服务了很多的域名,所以需要通过SNI指定具体的域名证书进行通信。

SNI(单IP多HTTPS证书)场景下,iOS上层网络库 NSURLConnection/NSURLSession 没有提供接口进行 SNI 字段 配置,因此需要 Socket 层级的底层网络库例如 CFNetwork,来实现 IP 直连网络请求适配方案。苹果提供的一些指导,在 Networking Programming Topics 中,可以通过如下方式指定一个TLS hostname:

我们使用CFNetwork进行HTTP网络请求的方法,详见 [2] 。

Apple - Communicating with HTTP Servers

Apple - HTTPS Server Trust Evaluation - Server Name Failures

Apple - HTTPS Server Trust Evaluation - Trusting One Specific Certificate

[1]:HTTPS场景IP直连方案说明

[2]:使用CFNetwork进行HTTP请求

dns服务器用来解析域名为IP,很多国外的服务器不能访问,主要原因就是DNS服务器不能解析那些域名;hosts就是本地用来解析域名为IP

拓展:域名(英语:Domain Name),又称网域,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识(有时也指地理位置)。

由于IP地址具有不方便记忆并且不能显示地址组织的名称和性质等缺点,人们设计出了域名,并通过网域名称系统(DNS,Domain Name System)来将域名和IP地址相互映射,使人更方便地访问互联网,而不用去记住能够被机器直接读取的IP地址数串。

要实现多个 HTTPS 主机共享一个 IP 地址的 443 端口,可以使用服务器名称指示(SNI)或透明代理来实现。

使用服务器名称指示(SNI):SNI 是一种 TLS 协议的扩展,它允许客户端在握手过程中发送要访问的目标主机名。服务器根据接收到的主机名选择相应的证书进行握手和加密通信。大多数现代浏览器和服务器都支持 SNI。为了配置 SNI,请确保服务器软件和操作系统支持 SNI,并将每个主机的 SSL 证书配置为相应的主机名。

使用透明代理:透明代理是指在代理服务器上进行 SSL/TLS 解密和再加密的过程。当客户端请求到达时,代理服务器会解密传入的 SSL 流量,读取 HTTP 请求头中的目标主机名,并根据该主机名将请求转发到正确的后端主机。然后,代理服务器会对响应进行再加密,并将它发送回客户端。这样,代理服务器可以共享相同的 IP 地址和端口,同时为不同的主机提供 HTTPS 服务。

独享享IP称为专用IP,专享IP或私有IP,就是这个IP只给你用,其他人无法用。

也就意味着你不需要受别人用途的影响,避免因为别人的使用IP被禁导致你无法访问目标网站的问题,更安全的同时也更快速。

将IP视为高速公路,则独享IP代理相当于一条独立的车道,同时只有一辆车在这条车道上行驶,也就是说,同一IP在同一时间内,确保指分配给一位客户,确保业务成功。

此外,独享IP代理还有什么好处?

稳定性高

独享IP代理由于同时只有一位用户在使用,因此稳定性高,不会出现拥堵,业务冲突等问题。

速度快

这很好理解,在相同的带宽条件下,独享的可以享受满速,而共享的如果有10个人在使用,那么你只能享受十分之一的速度,而且还很不稳定。

效率高

相信很多朋友都遇到过。获得一个IP后,我发现这个IP无法访问,速度慢,被网站拒绝,因为在你使用之前,这个IP可能会因为其他用户频繁访问而被关闭,你可以通过使用独家IP代理来完全避免这种情况,因为独家IP代理只有你一个人使用,不会和别人发生冲突。

独家IP代理对高频用户有无可比拟的好处,因为它的速度和效率都比共享IP代理强得多!

在Apache环境下实现一台服务器实现安装多个SSL证书,有2种解决方案:

方案一:SSL证书分类较多,其中有一款证书“多域名SSL证书”,这类证书可以支持一张证书为多个域名提供通信加密服务。但是这类证书也有不好的地方,对于OV SSL证书(企业验证)、EV SSL证书(组织验证)类证书而言只能显示同一个企业信息,如果需要不同的网站显示不同的企业信息就不能适用于此方法了。

方案二:服务器安装SNI ,SNI (Server Name Indication)是用来改善服务器与客户端的一个扩展。解决一台服务器的一个IP只能使用一个证书对应一个域名的缺点。

SSL证书到期或不信任需要进入淘宝找到Gworg重新认证HTTPS证书。

一、ssl证书包含域名与网址不一致

每一个ssl证书所对应的域名都具有唯一性,是一个全域名FQDN。当网站出具的证书所包含的域名和网站域名不一致,系统就会自动发出报告,提示证书域名不匹配。

解决方法:需要重新申请ssl证书。如有相同主域名的多站点,则要申请多域名ssl证书。西部数码网站拥有多种不同品牌的多域名ssl证书,用户可根据自身需求选择。

二、网站证书不是由受信任的机构颁发

这是因为证书不在浏览器厂商的受信任的列表中。可通过手动添加证书安装到浏览器的“信任列表”。

解决方法:浏览器中选项→内容选项卡→证书-→导入即可。

三、网站证书已过期或还未生效

出现这种情况一般是电脑系统日期错误,另一种就是证书过了有效期,则需要续费。

解决方法:可查看该证书信息的有效期止日期,确定证书是否在有效期内,如在的话需查看电脑日期是否正确。否则就是第二种原因,ssl证书不在有效期内,需尽快联系证书颁发厂商,进行续费。

四、页面包含有不安全的内容

目前都提倡每一个页面使用HTTPS,则网站所有内容都必须是HTTPS。如果遇到、JS脚本,FLASH插件是通过HTTP方式去调用的,就会发生这种错误。

解决方法:将调用的元素http改成HTTPS即可,然后刷新测试ssl问题是否已经解决。

五、浏览网页的时候突然弹出ssl连接错误

解决方法:按下“Win+R”组合键打开运行,在运行框中输入:inetcplcpl 点击确定打开“internet 选项”;切换到高级选项卡;在设置框中勾选“使用ssl 30”“使用ssl20””点击应用并点击确定,重启浏览器。

如果您在服务器上为某个站点添加了SSL证书,其他未添加证书的站点仍然可以访问到该站点,这可能是由以下原因导致的:

1 SSL证书未正确配置:请检查您的SSL证书配置是否正确。确保SSL证书已正确安装在服务器上,并且已正确配置到相应的站点。

2 SSL证书未过期:请检查您的SSL证书是否已过期。如果SSL证书已过期,其他未添加证书的站点可能仍然可以访问到该站点。

3 SSL证书未吊销:请检查您的SSL证书是否已被吊销。如果SSL证书已被吊销,其他未添加证书的站点可能仍然可以访问到该站点。

4 服务器配置问题:请检查服务器的配置是否正确。确保服务器已正确配置SSL证书,并且已启用SSL加密。

5 网络问题:请检查网络连接是否正常。如果网络连接不稳定,可能会导致其他未添加证书的站点仍然可以访问到该站点。

为了解决这个问题,您可以尝试以下方法:

1 检查SSL证书配置:确保您的SSL证书配置正确,包括证书文件路径、证书私钥文件路径、证书链等。

2 检查SSL证书有效期:确保您的SSL证书未过期,并且已过期的证书已被正确替换。

3 检查SSL证书吊销状态:确保您的SSL证书未被吊销,并且已被吊销的证书已被正确替换。

4 检查服务器配置:确保服务器已正确配置SSL证书,并且已启用SSL加密。

5 检查网络连接:确保网络连接稳定,以便其他未添加证书的站点仍然可以访问到该站点。

如果问题仍然存在,请联系服务器提供商或技术支持团队,以获取更详细的帮助。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » iOS下使用HttpDNS进行IP直连避免DNS劫持

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情