Как настроить аутентификацию сервера в Apache MINA sshd?

Я настроил ssh-сервер, используя Apache MINA sshd для SFTP. Я хочу включить аутентификацию сервера, чтобы клиенты не могли быть подделаны. На странице документации все, что говорится, это использовать следующий метод (Apache MINA sshd doc):

sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider("hostkey.ser"));

Но, насколько я понимаю, это генерирует пару ключей самостоятельно. Что делать, если я хочу использовать существующий файл сертификата для этого сервера?


person Alberto Anguita    schedule 30.09.2016    source источник


Ответы (2)


Хорошо, я нашел это. Я использовал класс MappedKeyPairProvider:

sshd.setKeyPairProvider(new MappedKeyPairProvider(loadKeyPair("certificateFile.p12")));

С loadKeyPair, определенным следующим образом:

public static loadKeyPair(String path) throws KeyStoreException, CertificateException, NoSuchAlgorithmException, IOException, UnrecoverableKeyException, NoSuchProviderException {
    KeyStore p12 = KeyStore.getInstance("pkcs12");
    p12.load(new FileInputStream(path), "certPassword".toCharArray());
    java.security.cert.Certificate cert = p12.getCertificate("myAlias");
    PublicKey publicKey = cert.getPublicKey();
    PrivateKey key = (PrivateKey)p12.getKey("myAlias", "certPassword".toCharArray());
    return new KeyPair(publicKey, key);
}

Обратите внимание, что мой сертификат хранится в формате PKCS12.

person Alberto Anguita    schedule 04.10.2016
comment
Вы нашли способ настроить аутентификацию при запуске bin\sshd.bat? - person Paul Bußmann; 08.05.2017
comment
Нет простите. Я все делал программно. - person Alberto Anguita; 10.05.2017
comment
Спасибо! Для тех, кто наткнется на это: встроенная аутентификация фиксируется на Objects.equals(имя пользователя, пароль), поэтому вы можете войти, например. как корень, корень. - person Paul Bußmann; 11.05.2017

FileKeyPairProvider проще

Path path = Paths.get(getClass().getClassLoader().getResource("server-key.pem").toURI());
sshd.setKeyPairProvider(new FileKeyPairProvider(path));
person Claus    schedule 31.05.2019
comment
Если вы упаковываете свое приложение, оно все еще будет работать? Я чувствую, что FileKeyPayProvider ожидает физический файл, и это будет работать только во время разработки, потому что вызов .toURI для ресурса все еще может создать file:// URI. - person Carlos Ferreyra; 13.10.2019
comment
Найден ClassLoadableResourceKeyPairProvider. - person Carlos Ferreyra; 13.10.2019