OpenSSH 中的 PKCS#11 提供程序:是否可以缓存 PIN?

OpenSSH 中的 PKCS#11 提供程序:是否可以缓存 PIN?

我在智能卡上使用 RSA 密钥和 OpenSSH 客户端。智能卡由带有密码键盘的智能卡读卡器读取。密钥受 PIN 码保护。

是否可以以某种方式缓存 PIN 码?我真的不喜欢每次使用 ssh 时都需要使用读卡器键盘写入 PIN... 这不仅很烦人,而且还让恕我直言,在其他人看来有太多可能性。

我的设置是 Debian/Devuan + OpenSC + .ssh/config 中的典型“PKCS11Provider /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so”。

我尝试在 opensc.conf、framework pkcs15 中添加以下几行,但没有效果:

use_pin_caching = true;
pin_cache_counter = 64;
pin_cache_ignore_user_consent = true;

我在OpenBSD上使用相同的配置,结果是一样的。

我使用 Aventra MyEID 4.5.5 作为智能卡。由于我试图在生产中使用该技术之前尽可能多地学习,因此我可以尝试不同的读卡器:Cherry、Gemalto(现为 Thales)和 SCM/Identiv。

答案1

ssh-agent将在一段时间内缓存 PIV 凭证(通过-tssh-agent 或 ssh-add)。

由于您的 ssh 客户端已经能够成功使用您的智能卡/piv 进行身份验证,因此这些ssh-add命令可能会为您将其缓存在 ssh-agent 中:

ssh-add -s <path to shared library pkcs11>  #add keys provided by pkcs11
#          for me, /usr/lib/ssh-keychain.dylib

当缓存的身份过期时,ssh错误为:

sign_and_send_pubkey: signing failed for RSA "<id>" from agent: agent refused operation

然后,您可以使用以下命令清除旧的缓存条目:

ssh-add -e <path to shared library pkcs11>  #removed keys provided by pkcs11
#          again, for me, /usr/lib/ssh-keychain.dylib

ssh-add -D                                  #delete all identities from agent (may not be needed, ymmv)

请参阅man ssh-add参考资料 获取更多详细信息,但截至 2024 年 2 月,除了 -s 和 -e 之外没有任何其他 PIV 特定选项。

需要注意的是,您正在使用 pkcs15;我不确定与ssh-add/ 的互操作性ssh-agent,但是在您传递正确的库时,这可能就是所需要的。

相关内容