fir*_*ear 5 security ssl https pinning ios
根据我的理解,SSL Pinning是预先将服务器的公钥或认证与客户端中捆绑的副本进行比较.
我在Stackoverflow中看到许多开发人员使用AFNetwork库的SSL Pinning,但他们中的大多数都使用它和自签名证书.
我从CA购买了有效的证书并通过了测试以验证它是否正常工作.我的意思是,我设置以下内容并且有效
...
_sharedHttpsInstance.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
_sharedHttpsInstance.securityPolicy.allowInvalidCertificates = NO;
...
Run Code Online (Sandbox Code Playgroud)
我想知道的是,如果将Pinning模式设置为AFSSLPinningModePulicKey,除了有效证书提供的内容之外,我的应用程序在与服务器的通信方面会更安全吗?
非常感谢.
我不知道iOS中SSL固定的确切实现,但原则上,固定提供了比一组内置证书代理的默认验证更高的安全性.默认情况下,系统信任来自全世界的100多个不同的CA,并且每个CA都能够发出它想要的任何证书,即使另一个CA已经颁发了相同或类似的证书.因此,如果这些100多个CA中的任何一个遭到入侵,他们可以为您的域颁发证书,除非您使用证书固定,否则该证书将通过您的应用程序中的检查.这种妥协发生在2011年与DigiNotar(因此不再存在)和Comodo(太大而不能失败).
可能是证书锁定最突出的用户是谷歌浏览器,它用于谷歌域名,这有助于检测DigiNotar和Comodo的妥协.
证书固定的缺点可能是,出于安全原因,应用程序将停止在进行SSL拦截的网络内工作.谷歌浏览器似乎通过接受证书来处理这种情况,如果它由用户明确添加的CA(即没有内置)签署,而不是钉扎检查.
另一个可能有趣的问题是,即使与自签名认证一起工作,SSL固定对于"大多数"应用程序是否安全"ENOUTH"?
检查固定证书或公钥(例如,使用或不使用自签名的证书固定)比仅检查证书是否由系统信任的任何100个CA签名更安全.只要开发人员完全控制双方(例如应用程序和服务器),它也可以很好地扩展.额外使用通常的基础结构的唯一优点是使用证书撤销机制.但是因为开发人员可以控制应用程序,所以只要证书被泄露就可以替换应用程序.所以是的,在大多数情况下,使用自签名证书进行SSL固定是足够安全的,并且它比使用标准证书验证而不固定更安全.