任何人请解释 SSL 固定和应用程序传输安全的作用。
我读到 SSLpinning 用于确保应用程序只与指定的服务器本身通信
随着 iOS 9 的发布,还引入了 App Transport Security 库。默认情况下,ATS 拒绝所有不至少使用 TLS 1.2 协议(protocol)的不安全连接。 TLS 协议(protocol)是 SSL 协议(protocol)的替代品,但它们通常仍被称为 SSL。考虑到 SSL 固定,将 TLS 或 SSL 作为底层实现没有区别 - 基本概念保持不变。
所以我的问题是 1.如果我的服务器使用的是TLS 1.2协议(protocol),那么启用ATS就足够安全了。无需在我的应用程序中执行 SSL Pinning。请确认 2. 如果我的服务器低于 TLS 1.2 协议(protocol),则 SSL 固定是避免不安全连接的最佳方式。请确认
最佳答案
证书固定可确保您的应用与正确的服务器通信。如果没有证书固定,我可以设置一个拦截代理来查看流入和流出您的应用程序的所有流量。
固定证书可确保我无法执行此操作,因为该应用程序只会接受来自提供正确固定证书的服务器的通信。
then enabling ATS is enough for security
您永远不会有“足够的安全性”,但这部分是基于您的应用正在执行的操作的上下文。如果您的应用程序处理的端点和数据是敏感的,您应该坚决地进行证书固定。我认为无论如何你都应该这样做,因为它很容易做到。
If my server below TLS 1.2 protocol, then SSL pinning is the best way to avoid insecure connections
这会导致 ATS 出现问题,您的服务器应该真正支持 TLS 1.2,它现在已经非常普遍了。您还需要确保证书使用的是至少具有 2048 位或更高 RSA key 或 256 位或更高椭圆曲线 (ECC) key 的 SHA256 指纹,并且您需要支持以下密码之一:
- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
这可能看起来很吓人,但实际上以上是非常标准的。
注意:
both of them are often referred to as SSL
你是对的,但这是一个坏习惯。他们可能做同样的事情,但他们做的方式不同。 SSL 是 SSL,TLS 是 TLS,它们是不同的。
注意 2:
如果您确实使用证书固定,请考虑使用公钥固定或 CA 证书固定。
关于ios - ATS 和 SSL 固定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46808938/