草庐IT

ios - 如果部署了有效证书,iOS AFNetwork SSL Pinning 模式是否会提供额外的安全奖励

coder 2023-09-24 原文

按照我的理解,SSL Pinning 就是将服务器的公钥或证书与事先绑定(bind)在客户端的副本进行比较。

我在 Stackoverflow 中看到许多开发人员使用 AFNetwork 库的 SSL Pinning,但他们中的大多数人将它与自签名证书一起使用。

我已从 CA 购买了有效证书并通过了测试以验证它是否正常工作。我的意思是,我设置了以下内容并且它起作用了

    ...
    _sharedHttpsInstance.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
    _sharedHttpsInstance.securityPolicy.allowInvalidCertificates = NO;
    ...

我想知道的是,如果将 Pinning 模式设置为 AFSSLPinningModePulicKey,除了提供有效证书之外,我的应用程序在与服务器通信时会更加安全吗?

非常感谢。

最佳答案

我不知道 SSL 锁定在 iOS 中的确切实现,但原则上锁定提供的安全性肯定比针对一组内置证书机构的默认验证更高。默认情况下,系统信任来自世界各地的 100 多个不同的 CA,并且每个 CA 都有能力颁发它想要的任何证书,即使另一个 CA 已经颁发了相同或相似的证书。因此,如果这 100 多个 CA 中的任何一个遭到破坏,他们都可以为您的域颁发证书,除非您使用证书固定,否则它将通过您的应用程序中的检查。这样的妥协发生在 2011 年的 DigiNotar(因此不再存在)和 Comodo(大到不能倒)。

证书固定的最著名用户可能是谷歌浏览器,它用于谷歌域,这有助于检测 DigiNotar 和 Comodo 的妥协。

证书固定的一个缺点可能是,应用程序将停止在出于安全原因进行 SSL 拦截的网络内部工作。如果证书是由用户明确添加的 CA 签署的(即没有内置的)替代固定检查,Google Chrome 似乎通过接受证书来处理这种情况。

Another question which might be interesting is if SSL pinning is secure 'ENOUTH' for 'Most' of the application, even if working along with self-signed certification?

检查固定证书或公钥(例如,使用或不使用自签名的证书固定)比仅检查证书是否由系统信任的 100 多个 CA 中的任何一个签名更安全。只要开发人员对双方(例如应用程序和服务器)具有完全控制权,它也可以很好地扩展。额外使用常用基础设施的唯一优势是使用证书撤销机制。但是因为开发人员可以控制应用程序,他可以在证书被泄露的情况下替换应用程序。所以是的,在大多数情况下,使用自签名证书进行 SSL 固定就足够安全了,而且它比使用没有固定的标准证书验证更安全。

关于ios - 如果部署了有效证书,iOS AFNetwork SSL Pinning 模式是否会提供额外的安全奖励,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24584015/

有关ios - 如果部署了有效证书,iOS AFNetwork SSL Pinning 模式是否会提供额外的安全奖励的更多相关文章

  1. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  2. ruby-on-rails - 如果为空或不验证数值,则使属性默认为 0 - 2

    我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val

  3. ruby - 检查数组是否在增加 - 2

    这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife

  4. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  5. ruby - 如何进行排列以有效地定制输出 - 2

    这是一道面试题,我没有答对,但还是很好奇怎么解。你有N个人的大家庭,分别是1,2,3,...,N岁。你想给你的大家庭拍张照片。所有的家庭成员都排成一排。“我是家里的friend,建议家庭成员安排如下:”1岁的家庭成员坐在这一排的最左边。每两个坐在一起的家庭成员的年龄相差不得超过2岁。输入:整数N,1≤N≤55。输出:摄影师可以拍摄的照片数量。示例->输入:4,输出:4符合条件的数组:[1,2,3,4][1,2,4,3][1,3,2,4][1,3,4,2]另一个例子:输入:5输出:6符合条件的数组:[1,2,3,4,5][1,2,3,5,4][1,2,4,3,5][1,2,4,5,3][

  6. ruby - 如果指定键的值在数组中相同,如何合并哈希 - 2

    我有一个这样的哈希数组:[{:foo=>2,:date=>Sat,01Sep2014},{:foo2=>2,:date=>Sat,02Sep2014},{:foo3=>3,:date=>Sat,01Sep2014},{:foo4=>4,:date=>Sat,03Sep2014},{:foo5=>5,:date=>Sat,02Sep2014}]如果:date相同,我想合并哈希值。我对上面数组的期望是:[{:foo=>2,:foo3=>3,:date=>Sat,01Sep2014},{:foo2=>2,:foo5=>5:date=>Sat,02Sep2014},{:foo4=>4,:dat

  7. ruby - 检查字符串是否包含散列中的任何键并返回它包含的键的值 - 2

    我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案

  8. ruby-on-rails - Ruby 检查日期时间是否为 iso8601 并保存 - 2

    我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby​​是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查

  9. ruby - 检查日期是否在过去 7 天内 - 2

    我的日期格式如下:"%d-%m-%Y"(例如,今天的日期为07-09-2015),我想看看是不是在过去的七天内。谁能推荐一种方法? 最佳答案 你可以这样做:require"date"Date.today-7 关于ruby-检查日期是否在过去7天内,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/32438063/

  10. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

随机推荐