如何制作 IOS 应用 *需要* DNSSec?

Posted

技术标签:

【中文标题】如何制作 IOS 应用 *需要* DNSSec?【英文标题】:How do I make an IOS app *require* DNSSec? 【发布时间】:2012-12-25 17:24:50 【问题描述】:

我需要确保我的 ios 应用在连接到给定服务器时需要 DNSSec。如何确保 DNS 调用始终使用它?

【问题讨论】:

看起来 ios 还不支持 dnssec。检查developer.apple.com/library/ios/#documentation/… 只是好奇,你为什么要这个? @Mike 我的 iOS 用户使用 Wifi,it's easy to get hacked (link) 我假设您已经设置了 SSL?因为即使您的 DNS 查询始终返回正确的响应,您的会话数据仍然可以被透明地代理和修改。 @Mike 是的,我知道。检查我的个人资料中的链接。即使 SSL 攻击正在进行中,DNSSec 也允许我验证在 DNS 中发布的密钥 【参考方案1】:

您必须将 DNS 库合并到您的源代码中。尝试使用 libunbound。使用 libunbound,您可以验证 DNSSEC 答案。有了它,您可以尝试使用 DANE 来保护您的 SSL 证书。

【讨论】:

但是您将如何使用这种方法来使用高级(例如)HTTP API?一旦你发送了 URL,一切就结束了。您无法比较 DNS 回复的准确性。在进行 DNS 查询后,您甚至无法发送 http://<ip-address/,因为您将丢失 Host: 标头。 (等) 如果您的高级 HTTP 库不支持 DNSSEC,那么您需要自己进行 DNS 查找(使用未绑定),然后如果结果有效,则使用 HTTP API 发出命令。请注意,您不能在 HTTP 请求中使用域,因为 HTTP 库可能会以非 DNSSEC 方式进行 DNS 查找,如果域被 dns 毒化,则该库仍会连接到流氓站点。您需要将您验证的 IP 地址传递给 HTTP 库(并在需要时使用/添加 Host 标头)【参考方案2】:

DNSSEC 作为dnssd Framework 的一部分在 iOS 10+ 的操作系统级别上可用。在使用 DNSServiceQueryRecord 查询 DNS 时,您可以通过使用 kDNSServiceFlagsValidate 标志来使用它。

如果您想保护您的 TLS 连接,您必须在 URLSessions urlSession(_:didReceive:completionHandler:) 方法中实现 dns 查询。

但是,您应该知道那里有公共 dns 服务器(例如 OpenDNS),do not support DNSSEC。

【讨论】:

【参考方案3】:

由于DNSSEC 在操作系统级别不可用,我认为您拥有的最佳选择是通过比操作系统更仔细地检查您的 SSL 服务器证书来保护您的应用程序。有关详细信息,请参阅this question。我建议将您希望收到的 CA 证书嵌入到您的应用中,并将其逐字节与信任链的根进行比较。

这叫certificate pinning。

【讨论】:

【参考方案4】:

DNSSec 位于操作系统级别。您可以在应用程序中控制的唯一内容是连接到服务器的方法。只需在所有通信中使用Secure Sockets Layer - SSL。

【讨论】:

以上是关于如何制作 IOS 应用 *需要* DNSSec?的主要内容,如果未能解决你的问题,请参考以下文章

当用户的设备在 iOS 中设置为 24 小时制时,如何将包含“am/pm”的字符串转换为 NSDate?

如何制作iOS目录?

如何使用 paypal MPL 制作实时 ios 应用程序

如何从我在 iOS 中制作的应用程序中打开新应用程序 (Facebook)

如何使用 phonegap 制作适用于桌面窗口和 IOS 的应用程序?

iOS:如何制作一个按钮以允许用户向朋友介绍我的应用程序? [复制]