【问题标题】:iOS 13 Certificate Pinning with Weak Cipher stopped working But works fine in iOS 12带有弱密码的 iOS 13 证书固定停止工作但在 iOS 12 中工作正常
【发布时间】:2020-10-28 11:12:14
【问题描述】:

我很好奇通过 NWProtocolTLS.Options() 传递弱密码。因为它在 iOS 12 中运行良好,但在 iOS 13 Apple 上我猜他们做了一些更改,所以它停止了。

这里有一件事是:OpenSSL 如何使用弱密码(TLS_DHE_RSA_WITH_AES_256_GCM_SHA384)并建立连接。以及为什么不使用 iOS 13 Network.framework。

基本上,我的 Socket 服务器已经被弱密码 TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 冻结了,这是我使用 WireShark 通过 OpenSSL 从 Server Hello 捕获的。所以现在我通过以下方法使用 iOS 13 传递这个密码,但它不起作用。

sec_protocol_options_append_tls_ciphersuite(tlsOptions.securityProtocolOptions, tls_ciphersuite_t.ECDHE_RSA_WITH_AES_256_GCM_SHA384)

注意:我们已经提出了反馈助手的查询,但我们仍在等待他们。 这不是 Web Socket,我们通过 Server Wifi Hotspot 连接。

借助适用于 iOS 的 OpenSSL 库 (https://github.com/levigroker/GRKOpenSSLFramework),我们以某种方式解决了这个问题,但是在长数据轮询和字节缓冲机制之后,在处理长数据时遇到了很多问题。

在 OpenSSL iOS App 中查看 Client Hello 它通过了 86 种密码及其作品。

但在 iOS Network.framework 中通过客户端 Hello 它通过了 36 个密码,但它不起作用。

如果有人想查看 WireShark 数据包,请添加评论,我会进一步附上。

所以任何想法或帮助表示赞赏!

【问题讨论】:

  • DHE 和 ECDHE 是不同的算法(尽管具有相似的数学基础)并且 DHE_RSA 和 ECDHE_RSA 是完全独立的 TLS 密钥交换;如果你想要前者,不要使用后者。
  • 好的 @dave_thompson_085 但我们在 iOS 13 更新的密码套件中没有得到 TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 的完全匹配

标签: openssl ios13 certificate-pinning swift-nio network-framework


【解决方案1】:

网络框架在内部使用 BoringSSL。在尝试使用 iOS 13.0 及更高版本不支持的 weak cipher(TLS_DHE_RSA_WITH_AES_256_GCM_SHA384) 连接时,BoringSSL 不会放弃握手,而是提供一个默认密码数组,包括


TLS_AES_128_GCM_SHA256,
TLS_AES_256_GCM_SHA384,
TLS_CHACHA20_POLY1305_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_128_CBC_SHA256,
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,
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_256_CBC_SHA,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
TLS_RSA_WITH_AES_256_GCM_SHA384,
TLS_RSA_WITH_AES_128_GCM_SHA256,
TLS_RSA_WITH_AES_256_CBC_SHA256,
TLS_RSA_WITH_AES_128_CBC_SHA256,
TLS_RSA_WITH_AES_256_CBC_SHA,
TLS_RSA_WITH_AES_128_CBC_SHA,
TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA,
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,
TLS_RSA_WITH_3DES_EDE_CBC_SHA

对此的唯一解决方案是请尝试在服务器端实现上述任何密码。

【讨论】:

  • 当然。我已经和服务器团队谈过了。谢谢。
猜你喜欢
  • 1970-01-01
  • 2019-04-11
  • 2019-07-17
  • 2020-02-18
  • 2017-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多