使用PKCS#11令牌从Java程序内部连接到sshd服务器
主要问题: 当服务器强制执行公钥身份验证机制并且密钥对应存储在PKCS#11令牌中时,有没有办法从Java程序内部连接到sshd服务器 说明: 我可以使用以下命令从控制台连接到服务器:使用PKCS#11令牌从Java程序内部连接到sshd服务器,java,ssh,jsch,pkcs#11,Java,Ssh,Jsch,Pkcs#11,主要问题: 当服务器强制执行公钥身份验证机制并且密钥对应存储在PKCS#11令牌中时,有没有办法从Java程序内部连接到sshd服务器 说明: 我可以使用以下命令从控制台连接到服务器: ssh -I myPkcs11TokenLib.so myUserName@myHostName 所以,似乎在sshd上所有配置都是正确的 当服务器配置为使用基于密码的身份验证时,我还能够使用jsch在Java程序内部建立连接。示例代码: JSch jsch = new JSch(); Session sshS
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 additionity(字符串名称、字节[]prvkey、字节[]pubkey、字节[]passphrase)
但是,我不知道如何从PKCS#11令牌读取密钥对,并将其转换为上述方法可接受的适当格式
即使我从令牌中检索私钥并将其适当地传递给addIdentity
方法,它也不完全是基于令牌的身份验证的目的。据我所知,ssh-I
命令不会从令牌中提取私钥。相反,它将公共加密函数(例如RSA sign)重定向到令牌。相反,addIdentity
方法需要普通私钥。因此,在某些情况下,它不够安全。(私钥以明文形式泄漏到RAM中!)
简而言之,我想知道是否有一种方法可以在Java程序中模拟ssh-I
,以建立到sshd服务器的连接