【发布时间】:2015-07-02 16:41:17
【问题描述】:
我有兴趣使用客户端令牌执行 SSL/TLS 的客户端证书身份验证,但客户端私钥驻留在(不可 PKCS11 访问的)硬件令牌上。本来想更换密钥管理器,但是无法从令牌中返回私钥,所以正在考虑修改底层的 SSLSocket 和相关类来实现我的目标。
在哪些 Java 类中是用于建立 TLS 会话的私钥,以便我可以覆盖该功能?还有其他建议吗?
【问题讨论】:
我有兴趣使用客户端令牌执行 SSL/TLS 的客户端证书身份验证,但客户端私钥驻留在(不可 PKCS11 访问的)硬件令牌上。本来想更换密钥管理器,但是无法从令牌中返回私钥,所以正在考虑修改底层的 SSLSocket 和相关类来实现我的目标。
在哪些 Java 类中是用于建立 TLS 会话的私钥,以便我可以覆盖该功能?还有其他建议吗?
【问题讨论】:
我最终通过创建一个新的提供者来做到这一点。我的提供商注册了以下内容:
提供商将我的令牌注册为 PKCS11 设备,以避免在客户端身份验证期间出现默认密码提示(我使用自定义密码提示作为令牌 PIN)。我把我的provder放在providers列表的顶部,新建了一个SSLContext并设置了SSLSocketFactory,最终建立了连接。
-Djavax.net.debug=true 在客户端和服务器上一直是我的朋友。
【讨论】: