Нетти - проблемы с выполнением рукопожатия TLS с устройством iOS - PullRequest
0 голосов
/ 19 октября 2018

Я работаю над Java-альтернативой libimobiledevice (не обернута или не привязана к родным библиотекам).

Я решил, что имеет смысл использовать Netty (v4.1.12) в качестве уровня связи, из-за природы нескольких уровней протоколов, связанных с взаимодействием со службами на устройстве, которые Netty может легко обработать с использованием конфигураций конвейера.

После реализации нескольких простых запросов от Usbmuxи Lockdown, я пытаюсь выполнить TLS-квитирование для запроса определенных сервисов на устройстве.

Сначала я попробовал простой подход - добавление SslHandler к конвейеру:

SslContext context = SslContextBuilder.forClient().build();
channel.pipeline().addFirst(context.newHandler(channel.alloc()));

Но кажется, что сертификат, отправленный с устройства, недействителен, в глазах анализатора сертификатов JDK x509:

io.netty.handler.codec.DecoderException: javax.net.ssl.SSLProtocolException: Empty issuer DN not allowed in X509Certificates
...
Caused by: java.security.cert.CertificateParsingException: Empty issuer DN not allowed in X509Certificates

Следующее, что я пробовал, было использование bouncycastle в качестве sslобработчик.
bouncycastle успешно проанализировал сертификат, но потерпел неудачу во время рукопожатия с другой ошибкой:

Caused by: org.bouncycastle.crypto.tls.TlsFatalAlert: illegal_parameter(47)
at org.bouncycastle.crypto.tls.TlsClientProtocol.receiveServerHelloMessage(Unknown Source)
at org.bouncycastle.crypto.tls.TlsClientProtocol.handleHandshakeMessage(Unknown Source)
at org.bouncycastle.crypto.tls.TlsProtocol.processHandshakeQueue(Unknown Source)
at org.bouncycastle.crypto.tls.TlsProtocol.processRecord(Unknown Source)
at org.bouncycastle.crypto.tls.RecordStream.readRecord(Unknown Source)
at org.bouncycastle.crypto.tls.TlsProtocol.safeReadRecord(Unknown Source)
at org.bouncycastle.crypto.tls.TlsProtocol.blockForHandshake(Unknown Source)
at org.bouncycastle.crypto.tls.TlsClientProtocol.connect(Unknown Source)

Я попытался отладитьв bouncycastle и понять, что было недопустимым параметром, и мне кажется, что существует несоответствие в версии протокола, запрошенной устройством (TLSv1.0), и версии, запрошенной клиентом (TLSv1.2).

Я бы вставил пример рабочего кода здесь, но для перехода к части сеанса SSL требуется довольно большой набор инструментов и библиотек синтаксического анализа.
Я попытаюсь создать образец git репо для этой цели (возможно,даже сделать весь проект открытым исходным кодом позже), но я надеялся, что кто-то покажет мне правильное направление.

Не стесняйтесь просить другие материалы, такие как шестнадцатеричный дамп рукопожатия илисертификаты включены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...