Как использовать JGit с GitHub в 2022 году

В 2022 году GitHub прекратил поддержку DSA и RSA со старыми подписями.

К сожалению, JGit использует JSch, который не получает никаких обновлений и будет всегда предлагать старые подписи с RSA даже для «хороших» ключей, а его реализация ECDSA/ed25519 завершится ошибкой при попытке повторного подключения.

Можно ли вообще использовать JGit с GitHub — какую конфигурацию мне следует использовать? Я говорю о комбинации типа ключа, настроек конфигурации и вызовов кода, которая привела бы к надежной работе против GitHub.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Существует вилка JSch, который поддерживает современные алгоритмы и должен быть достаточно надежным. Я знаю по крайней мере одну крупную организацию, успешно использующую его против GitHub.

Однако обратите внимание, что по умолчанию он отключает поддержку RSA с SHA-1, потому что он небезопасен (поэтому GitHub поэтапно отказывается от него), поэтому, если вам нужно работать с сайтами, которые не поддерживают ничего другого (например, Azure DevOps в момент), вам нужно будет установить некоторую конфигурацию соответственно.

Вы также можете использовать Apache Mina в сочетании с JGit. Версия 5.13 JGit поддерживает Mina 2.7.0, которая должна поддерживать современные алгоритмы.

Эта вилка, похоже, имеет разные имена пакетов, поэтому, если не будет вилки JGit, которая может ее использовать, я думаю, это не сработает.

alamar 18.03.2022 20:50

Возможно, вам удастся убедить команду JGit поддержать этот форк. В противном случае на данный момент я предлагаю использовать Git из командной строки.

bk2204 18.03.2022 20:56
github.com/mwiede/jsch/issues/85 ОТКРЫТ :(
alamar 18.03.2022 20:59

Я также отредактировал, включив Apache MINA, альтернативную реализацию, которая должна поддерживать современные алгоритмы.

bk2204 18.03.2022 22:12
Ответ принят как подходящий

Последний JGit поддерживает Apache MINA, который может без проблем использовать ключи ECDSA.

Имейте в виду, что JGit 6.x создан для Java 11+. Используйте следующие артефакты Maven:

        <dependency>
            <groupId>org.eclipse.jgit</groupId>
            <artifactId>org.eclipse.jgit</artifactId>
            <version>5.13.0.202109080827-r</version>
        </dependency>

        <dependency>
            <groupId>org.eclipse.jgit</groupId>
            <artifactId>org.eclipse.jgit.ssh.apache</artifactId>
            <version>5.13.0.202109080827-r</version>
        </dependency>

В моем случае изменения кода не потребовалось.

Другие вопросы по теме