ios - ATS 和 SSL 固定

标签 ios security ssl https ios9

任何人请解释 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/

相关文章:

ios - SpriteKit 动画问题

ios - 返回字符串数组并填充 UILabel - Swift 3

ajax - 有没有办法验证 ajax 请求是否是从给定域发出的?

java - 在 Java 6 上使用 httpClient 4.3.6 在客户端强制协议(protocol)

由于 ssl 证书,laravel 电子邮件验证在生产中不起作用

iOS 在 swift 主 StoryBoard 之前创建一个欢迎页面

ios - 例如,textView 无法选择?

python - 如何安全地运行另一个Python文件?

php - 我的 session ID 是在登录前生成的吗?

ssl - SSL 和证书如何在服务器和浏览器之间工作