Ява.безопасность.InvalidAlgorithmParameterException приходит в SFTP


Привет я пытаюсь простой sftp, но я получаю ошибку при установке. соединение, я использую maverick-legacy-client-all jar, доступный по адресу https://www.sshtools.com/en/products/java-ssh-client этот код прекрасно работал с выпуском 1.6.9, но он не сработал, когда я обновил его до 1.6.17.

Я также попытался пройти через там jar изменения doc здесь , было несколько заметок относительно моего исключения DiffieHellmanGroupExchange Algo связанных изменений но я не мог понять их ясно.

public void connect() throws SshException, IOException,
        SftpStatusException, ChannelOpenException {

    SshConnector con = SshConnector.createInstance();
    con.setKnownHosts(new SftpHostKeyVerification());
    // Tries SSH2 first and fallback to SSH1 if its not available
    con.setSupportedVersions(SshConnector.SSH1 | SshConnector.SSH2);
    /*Error coming here, in con.connect*/

    this.ssh = con
            .connect(new SocketTransport(this.host, DEFAULT_SSH_PORT),
                    this.userName);

    PasswordAuthentication pwd = new PasswordAuthentication();
    pwd.setPassword(this.passwod);
    int isLoggedIn = this.ssh.authenticate(pwd);
    if (SshAuthentication.COMPLETE == isLoggedIn) {
        this.client = new SftpClient(this.ssh);
    } else {
        throw new IOException("[Authentication failure] login status: "
                + isLoggedIn);
    }
}

Журнал Исключений:

com.maverick.ssh.SshException: com.maverick.ssh.SshException
    at com.maverick.ssh.components.jce.client.DiffieHellmanGroupExchangeSha1.performClientExchange(DiffieHellmanGroupExchangeSha1.java:315)
    at com.maverick.ssh2.TransportProtocol.performKeyExchange(TransportProtocol.java:1424)
    at com.maverick.ssh2.TransportProtocol.processMessage(TransportProtocol.java:1835)
    at com.maverick.ssh2.TransportProtocol.startTransportProtocol(TransportProtocol.java:348)
    at com.maverick.ssh2.Ssh2Client.connect(Ssh2Client.java:146)
    at com.maverick.ssh.SshConnector.connect(SshConnector.java:649)
    at com.maverick.ssh.SshConnector.connect(SshConnector.java:471)
    at com.tekelec.ems.util.SftpImpl.connect(SftpImpl.java:73)
    at com.tekelec.ems.eagle.measurement.WriterThread.run(WriterThread.java:93)

 Caused by: com.maverick.ssh.SshException: Failed to generate DH value: Prime size must be multiple of 64, and can only range from 512 to 1024 (inclusive) [java.security.InvalidAlgorithmParameterException]
    at com.maverick.ssh.components.jce.client.DiffieHellmanGroupExchangeSha1.performClientExchange(DiffieHellmanGroupExchangeSha1.java:250)
    ... 8 more

Caused by: java.security.InvalidAlgorithmParameterException: Prime size must be multiple of 64, and can only range from 512 to 1024 (inclusive)
    at com.sun.crypto.provider.DHKeyPairGenerator.initialize(DHKeyPairGenerator.java:120)
    at java.security.KeyPairGenerator$Delegate.initialize(KeyPairGenerator.java:658)
    at java.security.KeyPairGenerator.initialize(KeyPairGenerator.java:400)
    at com.maverick.ssh.components.jce.client.DiffieHellmanGroupExchangeSha1.performClientExchange(DiffieHellmanGroupExchangeSha1.java:240)
    ... 8 more
2 2

2 ответа:

Это потому, что алгоритм обмена ключами по умолчанию был изменен на более безопасный алгоритм между этими версиями, и вы не включили все зависимости сторонних разработчиков, которые предоставляются в папке lib дистрибутива Maverick Legacy Client. Эта папка содержит поставщик BouncyCastle JCE, который при добавлении в путь к классу решит эту проблему.

Проблема, с которой вы столкнулись, заключается в том, что без поставщика JCE BouncyCastle или подходящего поставщика JCE, который поддерживает большие Диффи Хеллман простые числа вы не сможете создать большое простое число для обновленного, более безопасного метода обмена ключами.

Я считаю, что это очень серьезное состояние, возникающее у многих программистов, также я хотел бы поблагодарить Ли Дэвида здесь за совет. я смог справиться с этой ситуацией, добавив Bouncy Castle JCE 3rd party jar, доступный в папке maverick lib .

До этого я пытался отредактировать свою java.файл безопасности, как предлагалось в другом сообщении, но это был очень простой способ, также эти баночки с надувным замком поставляются в комплекте в официальном релизе Maverick, так что не беспокойтесь по этой части к.