iOS 13 使用弱密码的证书固定停止工作但在 iOS 12 中工作正常

iOS 13 Certificate Pinning with Weak Cipher stopped working But works fine in iOS 12

我对通过 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,我们通过服务器 Wifi 热点连接。

我们在 OpenSSL Library(https://github.com/levigroker/GRKOpenSSLFramework) for iOS 的帮助下以某种方式解决了这个问题,但是在长时间的数据轮询和字节缓冲机制之后,在处理更长的数据。

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

但是在iOSNetwork.framework路过客户你好 它通过了 36 位密码,但它不起作用。

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

任何想法或帮助表示感谢!

网络框架在内部使用 BoringSSL。在尝试连接 iOS 13.0 及更高版本不支持的 弱密码 (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

唯一的解决办法是请尝试在服务器端实施上述任何密码。