我正在尝试创建一个浏览器应用程序,该应用程序将访问需要TLS相互客户端身份验证的服务器。该应用程序需要能够通过PKCS#11接口提供客户端证书和密钥。

看过有关Android通用tls的各种文章后,我认为PKCS#11要求排除了使用Android密钥链/将证书添加到Android上的默认密钥库的权限(因为无法直接访问私钥)。

我有PKCS#11接口,因此可以使用私钥对数据签名。

有没有办法拦截Android用密钥对数据签名的调用,以便我可以改用PKCS#11接口?目前看来,我唯一的选择实际上是实现自己的TLS堆栈来实现此目的。

最佳答案

这取决于:)您定位的平台是什么?在Jelly Bean上,密钥库中对硬件设备有一些支持,因此您可以编写一个使用PKCS#11的密钥主模块。但是,那是一个OS组件,因此需要实现自己的ROM。您还可以开发由PKCS#11模块支持的自己的JCE提供程序。然后,在浏览器中,确保进行客户端身份验证时SSL引擎使用您的提供程序。

08-17 17:27