如何制作 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 中制作的应用程序中打开新应用程序 (Facebook)