【问题标题】:SSLSocket with hardware token key带有硬件令牌密钥的 SSLSocket
【发布时间】:2015-07-02 16:41:17
【问题描述】:

我有兴趣使用客户端令牌执行 SSL/TLS 的客户端证书身份验证,但客户端私钥驻留在(不可 PKCS11 访问的)硬件令牌上。本来想更换密钥管理器,但是无法从令牌中返回私钥,所以正在考虑修改底层的 SSLSocket 和相关类来实现我的目标。

在哪些 Java 类中是用于建立 TLS 会话的私钥,以便我可以覆盖该功能?还有其他建议吗?

【问题讨论】:

    标签: java smartcard


    【解决方案1】:

    我最终通过创建一个新的提供者来做到这一点。我的提供商注册了以下内容:

    • 实现 PrivateKey 的硬件设备抽象;我称它为“令牌”。
    • 扩展 KeyStoreSpi 的自定义密钥库。密钥库知道如何从 Token 枚举证书和别名。
    • 知道如何使用令牌执行签名操作的自定义签名对象。我只需要为我的班级实现 RSA/SHA 签名算法的一个子集。
    • 扩展 SSLSocketFactory 的自定义套接字工厂。我这样做是为了设置首选密码套件。

    提供商将我的令牌注册为 PKCS11 设备,以避免在客户端身份验证期间出现默认密码提示(我使用自定义密码提示作为令牌 PIN)。我把我的provder放在providers列表的顶部,新建了一个SSLContext并设置了SSLSocketFactory,最终建立了连接。

    -Djavax.net.debug=true 在客户端和服务器上一直是我的朋友。

    【讨论】:

      猜你喜欢
      • 2019-11-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      • 2015-01-05
      • 2018-01-21
      • 2019-07-30
      • 2017-12-31
      相关资源
      最近更新 更多