我正在使用J2SSH 0.2.9 SFTP。连接到特定的SFTP站点时,我收到错误
主机密钥签名无效
但是,使用WinSCP或Filezilla连接到同一站点并不会给我带来任何错误。
关注的特定代码区域是
boolean result = pk.verifySignature(sig, sigdata);
log.info("The host key signature is " +
(result ? " valid" : "invalid"));
在TransportProtocolClient.java
中密钥是SSH-DSS,如果它有所作为。
答案 0 :(得分:1)
在没有环境重现的情况下在黑暗中刺伤,但我会猜测你所连接的是j2ssh.transport.publickey.dsa.SshDssPublicKey
的这部分问题。
163 if (!header.equals("ssh-dss")) {
164 throw new InvalidSshKeySignatureException();
165 }
还有一些其他错误情况会导致同样的例外情况。
252 } catch (NoSuchAlgorithmException nsae) {
253 throw new InvalidSshKeySignatureException();
254 } catch (InvalidKeyException ike) {
255 throw new InvalidSshKeySignatureException();
256 } catch (IOException ioe) {
257 throw new InvalidSshKeySignatureException();
258 } catch (SignatureException se) {
259 throw new InvalidSshKeySignatureException();
260 }
我怀疑服务器是否错过了解IETF RFC 4253的第13页并发送了一些稍微不同的东西(所有大写?)来编码签名格式标识符。我检查过的具有类似功能的其他程序似乎强制将键名称强制为大写或小写,然后执行相等检查。