Используйте токен PKCS # 11 для подключения к sshd-серверу изнутри программы Java - PullRequest
1 голос
/ 16 июня 2020

Основной вопрос:

Есть ли способ подключиться к sshd-серверу изнутри программы Java, когда сервер применяет механизм аутентификации publi c -key, и пара ключей должна храниться в Токены PKCS # 11?

Пояснение:

Я могу подключиться к серверу из консоли с помощью следующей команды:

ssh -I myPkcs11TokenLib.so myUserName@myHostName

Итак, похоже, что все настроено правильно на sshd.

Мне также удалось установить sh соединение внутри Java программы, используя jsch, когда сервер был настроен на использование аутентификации на основе пароля. Пример кода:

JSch jsch = new JSch();
Session sshSession = jsch.getSession("myUserName", "myHostName", 22);
sshSession.setPassword("myPass");
sshSession.setConfig("StrictHostKeyChecking", "no");
sshSession.connect(5000);

Более того, я знаю, что jsch имеет метод public void addIdentity(String name, byte[] prvkey, byte[] pubkey, byte[] passphrase) для аутентификации publi c -key.

Однако я НЕ знаю как я могу прочитать пару ключей из моего токена PKCS # 11 и преобразовать ее в соответствующий формат , приемлемый для вышеупомянутого метода.

Даже если я извлекаю закрытый ключ из токена и соответствующим образом передаю это метод addIdentity, это не совсем то, что предназначено для аутентификации на основе токенов. Насколько мне известно, команда ssh -I не извлекает закрытый ключ из токена. Вместо этого он перенаправляет функции publi c cryptographi c (например, знак RSA) на токен. В отличие от метода addIdentity требуется простой закрытый ключ. Таким образом, в некоторых ситуациях он не будет достаточно безопасным. (Закрытый ключ попадает в оперативную память просто!)

Короче говоря, я хочу знать, есть ли способ имитировать ssh -I в Java программе , чтобы установить sh подключение к sshd серверу?

...