Ошибка рукопожатия Java GCM - PullRequest
0 голосов
/ 29 октября 2019

Я пытаюсь установить двустороннее соединение TLS1.2 с удаленным веб-сервером (не управляется мной). Всякий раз, когда java согласовывает протокол TLS, который использует GCM, я получаю ошибку рукопожатия. В течение некоторого времени я пропускал эту проблему, просто заставляя меня делать доступным только CBC (быстро и грязно). К сожалению, это больше не вариант, так как веб-сервис теперь ограничен протоколами GCM.

Я дважды проверил все сертификаты (все в порядке) и обратите внимание, что это работает с CBC и работает с другими веб-сервисами. Я перепробовал все доступные протоколы, которые веб-служба (сейчас) принимает (все, которые используют GCM) и все сбрасывает сбои рукопожатия. Я сделал пример проекта в ядре Dotnet, в котором двухсторонний TLS1.2 работает как шарм (обратите внимание, что это не вариант использовать dotnet). Я использую Я использую Java SDK 1.8.0_201 и использую javax.net.ssl. *. Как здесь происходит испорченная часть, я обычно запускаю с -Djavax.net.debug = ssl: handshake: verbose, чтобы я знал, что происходит, но если я вместо этого запускаю с -Djavax.net.debug = all (ничегоеще было изменено) все волшебным образом, кажется, работает, я изучил его и по предоставленному журналу не могу выявить каких-либо различий в переговорах (вплоть до момента, когда один из них выдает ошибку рукопожатия, а другой преуспевает). Я попытался выполнить рукопожатие в Wireshark, но если вы попытались это сделать, вы будете знать, что это почти невозможно, даже если вы знаете, как работает протокол (теоретически на высоком уровне) и знаете теорию групп, RSA, AES, GCMи т. д.

Я бы ожидал, что это будет какое-то время? Поскольку функциональность debug = all значительно замедляет взаимодействие между внешним веб-сервисом и моим собственным (я имею в виду, что запись большого количества мусора в журнал обязана это делать).

Любые предложения или советы приветствуются.

...