2013-03-12 2 views
1

Я пытаюсь настроить ssh-сервер, используя apache mina sshd. Я хочу использовать открытый ключ аутентификации, и в основном я хочу знать, как реализоватьаутентификация открытого ключа apache sshd

package org.apache.sshd.server; 
import java.security.PublicKey; 
import org.apache.sshd.server.session.ServerSession; 

public interface PublickeyAuthenticator { 

boolean authenticate(String username, PublicKey key, ServerSession session); 

} 

я вижу, что то, что передается еще один открытый ключ. Поэтому я предполагаю, что вы должны сравнить открытый ключ, указанный в параметре, с открытым ключом, который имеет сервер. Но я не знаю, как это сделать.

Одна вещь, которую я нашел, это this реализация. что кажется бессмысленным, поскольку он, по-видимому, сравнивает модуль открытого ключа с самим собой. Предполагая, что эта реализация имеет ошибку и должна сравнивать модули каждого открытого ключа, достаточно ли этого для аутентификации - что модули согласны? Разумеется, если бы я только что подал публично доступный открытый ключ к этой функции, тогда я получил бы аутентификацию?

ответ

7

Я думаю, что нашел ответ в источнике org.apache.sshd.server.auth.UserAuthPublicKey#auth. Этот класс выполняет фактический auth с ключом. Я думаю, что меня смутило название метода - authenticate(). Что на самом деле происходит следующим образом:

  • Сервер запрашивает открытый ключ клиента

  • Открытый ключ передается PublickeyAuthenticator#authenticate

  • Все, что вы должны делать в authenticate() является убедитесь, что это открытый ключ, который вы хотите разрешить.

  • Если authenticate() возвращает true, то UserAuthPublicKey#auth будет проверять, что сообщение было подписанный с закрытым ключом. Если он прошел проверку подлинности.

+0

Помогло мне поблагодарить. –

+0

Полезное содержание спасибо – btiernay