В 2022 году GitHub прекратил поддержку DSA и RSA со старыми подписями.
К сожалению, JGit использует JSch, который не получает никаких обновлений и будет всегда предлагать старые подписи с RSA даже для «хороших» ключей, а его реализация ECDSA/ed25519 завершится ошибкой при попытке повторного подключения.
Можно ли вообще использовать JGit с GitHub — какую конфигурацию мне следует использовать? Я говорю о комбинации типа ключа, настроек конфигурации и вызовов кода, которая привела бы к надежной работе против GitHub.
Существует вилка JSch, который поддерживает современные алгоритмы и должен быть достаточно надежным. Я знаю по крайней мере одну крупную организацию, успешно использующую его против GitHub.
Однако обратите внимание, что по умолчанию он отключает поддержку RSA с SHA-1, потому что он небезопасен (поэтому GitHub поэтапно отказывается от него), поэтому, если вам нужно работать с сайтами, которые не поддерживают ничего другого (например, Azure DevOps в момент), вам нужно будет установить некоторую конфигурацию соответственно.
Вы также можете использовать Apache Mina в сочетании с JGit. Версия 5.13 JGit поддерживает Mina 2.7.0, которая должна поддерживать современные алгоритмы.
Возможно, вам удастся убедить команду JGit поддержать этот форк. В противном случае на данный момент я предлагаю использовать Git из командной строки.
Я также отредактировал, включив Apache MINA, альтернативную реализацию, которая должна поддерживать современные алгоритмы.
Последний 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>
В моем случае изменения кода не потребовалось.
Эта вилка, похоже, имеет разные имена пакетов, поэтому, если не будет вилки JGit, которая может ее использовать, я думаю, это не сработает.