我对使用客户端令牌对SSL / TLS执行客户端证书身份验证感兴趣,但客户端私钥驻留在(非PKCS11可访问的)硬件令牌上。我原本想替换密钥管理器,但是我无法从令牌中返回私钥,因此我正在考虑修改底层SSLSocket和相关类来实现我的目标。
在哪些Java类中是用于建立TLS会话的私钥,以便我可以覆盖该功能?还有其他建议吗?
答案 0 :(得分:2)
我最终通过创建一个新的提供商来做到这一点。我的提供者注册以下内容:
提供程序将我的令牌注册为PKCS11设备,以避免在客户端身份验证期间出现默认密码提示(我使用自定义密码提示输入令牌PIN)。我把我的提供者放在提供者列表的顶部,创建了一个新的SSLContext并设置了SSLSocketFactory,最后建立了连接。
客户端和服务器上的-Djavax.net.debug = true始终是我的朋友。