java - 使用 PKCS#11 令牌从 Java 程序内部连接到 sshd 服务器
问题描述
主要问题:
当服务器强制执行公钥身份验证机制并且密钥对应存储在 PKCS#11 令牌中时,是否有任何方法可以从 Java 程序内部连接到 sshd 服务器?
解释:
我可以使用以下命令从控制台连接到服务器:
ssh -I myPkcs11TokenLib.so myUserName@myHostName
所以,似乎一切都在 sshd 上正确配置。
jsch
当服务器配置为使用基于密码的身份验证时,我还能够在 Java 程序中建立连接。示例代码:
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)
公钥认证的方法。
但是,我不知道如何从我的 PKCS#11 令牌中读取密钥对并将其转换为上述方法可接受的适当格式。
即使我从令牌中检索私钥并将其适当地传递给addIdentity
方法,这也不完全是基于令牌的身份验证中的意图。据我所知,ssh -I
命令不会从令牌中提取私钥。相反,它将公共加密功能(例如 RSA 签名)重定向到令牌。相反,addIdentity
方法需要普通的私钥。因此,在某些情况下它不够安全。(私钥直接泄漏到 RAM 中!)
简而言之,我想知道是否有一种方法可以在 Java 程序中进行模拟ssh -I
以建立与 sshd 服务器的连接?
解决方案
推荐阅读
- pybind11 - VS2017 与 pybind11 一起使用时会引发链接器错误
- c# - 等待第三方 API 回调
- c# - UWP C#:从本地磁盘打开 HTML 文件到默认浏览器
- javascript - addEventListener 没有在按键上触发
- php - 如果身体标签通过子主题具有“家”类
- python - 用Python模拟退火算法解决旅行商问题
- python-3.x - 如何使用 Youtube Data API v3 获取 youtube 频道中的所有视频标题?
- google-admin-sdk - 查询 Admin Report API 以了解用户活动时未返回任何项目
- python - python shutil.move 使用文件修复移动目录
- performance - 如何提高Go中逐行读取大文件的速度