jos*_*eph 3 java ssh apache-mina
我正在使用 Apache sshd 的 ssh 客户端。每当我建立与目标 ssh 服务器的连接时,我都会在日志中看到这一点。连接正常,但是有什么问题吗?我该如何修复它?
异常看起来像:
(SshException) to process: EdDSA provider not supported
Run Code Online (Sandbox Code Playgroud)
jos*_*eph 12
怎么修
要解决此问题,请添加依赖项 net.i2p.crypto:eddsa。Bouncy castle 不提供 EdDSA 的实现。例如在 Maven 中添加此依赖项:
<dependency>
<groupId>net.i2p.crypto</groupId>
<artifactId>eddsa</artifactId>
<version>0.3.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
不修复的影响
如果不解决此问题,您将无法验证主机密钥。我的测试没有受到影响,因为我尚未验证主机密钥。然而,一旦部署到生产中,我就会受到影响,因为必须验证主机密钥。
细节
在 Apache mina-sshd 源代码中, 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"));
Run Code Online (Sandbox Code Playgroud)
查看EdDSASecurityProviderRegistrar,您会发现它期望该类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();
}
Run Code Online (Sandbox Code Playgroud)
快速谷歌搜索,你会发现它net.i2p.crypto.eddsa.EdDSAKey是由库 net.i2p.crypto:eddsa 提供的。
| 归档时间: |
|
| 查看次数: |
6366 次 |
| 最近记录: |