不支持apache mina sshd ssh客户端始终打印eddsa提供程序

vsaztqbk  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(1684)

我使用的是apachesshd的ssh客户端。每当我建立到目标ssh服务器的连接时,我都会在日志中看到这一点。连接正常,但有什么问题吗?我该怎么修?
例外情况如下:

(SshException) to process: EdDSA provider not supported
ljo96ir5

ljo96ir51#

如何修复
要解决此问题,请添加依赖项net.i2p。crypto:eddsa. bouncy castle不提供eddsa的实现。例如,在maven中添加以下依赖项:

<dependency>
       <groupId>net.i2p.crypto</groupId>
       <artifactId>eddsa</artifactId>
       <version>0.3.0</version>
   </dependency>

不固定的影响
如果不解决此问题,则无法验证主机密钥。我的测试没有受到影响,因为我还没有验证主机密钥。但是,一旦部署到生产环境中,我就会受到影响,因为必须验证主机密钥。
细节
在apacheminasshd源代码中,securityutils类揭示了这个问题。该类对eddsa的提供者进行硬编码 EdDSASecurityProviderRegistrar :

public static final List<String> DEFAULT_SECURITY_PROVIDER_REGISTRARS = Collections.unmodifiableList(
        Arrays.asList(
                "org.apache.sshd.common.util.security.bouncycastle.BouncyCastleSecurityProviderRegistrar",
                "org.apache.sshd.common.util.security.eddsa.EdDSASecurityProviderRegistrar"));

通过查看eddsasecurityproviderregistrator,您可以看到它期望类 net.i2p.crypto.eddsa.EdDSAKey 存在:

@Override
public boolean isSupported() {
    Boolean supported;
    synchronized (supportHolder) {
        supported = supportHolder.get();
        if (supported != null) {
            return supported.booleanValue();
        }

        ClassLoader cl = ThreadUtils.resolveDefaultClassLoader(getClass());
        supported = ReflectionUtils.isClassAvailable(cl, "net.i2p.crypto.eddsa.EdDSAKey");
        supportHolder.set(supported);
    }

    return supported.booleanValue();
}

一个快速的谷歌搜索,你就会看到 net.i2p.crypto.eddsa.EdDSAKey 由库net.i2p提供。crypto:eddsa.

相关问题