在JSch库中使用服务器指纹而不是设置公钥文件

时间:2017-11-22 07:36:15

标签: java ssh coldfusion sftp jsch

在我的ColdFusion应用程序中,我正在使用Java库JSch。 SFTP服务器是BitVise个人版(用于测试目的)。目前我正在强制StrictHostKeyChecking,为此,我使用以下方法从文件名创建主机密钥存储库。

public void setKnownHosts(String filename)
                   throws JSchException

有没有办法设置服务器的指纹(如2b:16:18:83:7b:c6:5e:49:f2:f0:8e:e2:dc:64:da:1a)而不是在JSch库中使用公钥?

示例公钥引用,以防需要:

  

localhost ssh-rsa   AAAAB3NzaC1yc2EAAAADAQABAAABgQCktHvR7qZv + HVOjpALTETAe9uvGsaOlqF / xGKqgOk8eEloz + 3ZItjFIyHxosiQvM4NFkciAsALpWyQwCWDrF8CaAmGJv8p4nY6u2pDaMhSCcFYU / dUOSV26sc2hrALsZhu3OYG3 + K1L5QGRDYQ8OVzAXf16i5sITFAS4eArmtRHHrATPyreZdA52GMl7GrHjbDToTmUsV2rPAg + ASasAS / se4QK6UGTMeWG2A9JrilcAmWl / DSfLjJclaoZz1gg8bfCqaDEf1iUWkJIOtpyt08LoQZLxXSFlcKYa / 6dICFZW9E2YrAxHMOhyZpEXIf / iA79EX8aHNayVkDOh42MlX + CyB3l3thzAO0g + nAjKLoJN8KyJ9ioymQdyxnGLA8m2E + UnQ9OOznJ6ZzopnlSPQ2rygAGOW2TCHYFh + 91S0 =

1 个答案:

答案 0 :(得分:2)

HostKeyRepository interfacekey参数计算的指纹与已知指纹进行比较的方式实施您自己的check method

public class HostKeyFingerprintRepository implements HostKeyRepository
{
    int check(String host, byte[] key)
    {
        // Based on KeyExchange.getFingerPrint
        Class c = Class.forName(jsch.getConfig("md5"));
        HASH hash = (HASH)(c.newInstance());
        // Based on Util.getFingerPrint
        hash.init();
        hash.update(key, 0, key.length);
        byte[] foo=hash.digest();
        StringBuffer sb=new StringBuffer();
        int bar;
        for(int i=0; i<foo.length;i++){
          bar=foo[i]&0xff;
          sb.append(chars[(bar>>>4)&0xf]);
          sb.append(chars[(bar)&0xf]);
          if(i+1<foo.length)
            sb.append(":");
        }
        String fingerprint = sb.toString();
        if (fingerprint.equals("2b:16:18:83:7b:c6:5e:49:f2:f0:8e:e2:dc:64:da:1a"))
        {
            return OK;
        }
        else
        {
            return NOT_INCLUDED;
        }
    } 

    // dummy implementations of the other methods
}

使用Session.setHostKeyRepository将您的实施与会话相关联。