Android 4.4自定义JCE Provider实现,用于硬件支持的相互SSL身份验证

时间:2015-02-09 10:31:38

标签: java android authentication ssl nfc

我目前正在使用Android Studio开发Android应用程序,用于基于硬件的相互SSL身份验证。

客户端身份验证是基于硬件的,因此我无权访问客户端证书的私钥。我能做的是

  • 将客户端证书作为密钥库中的X509证书
  • 使用私钥签名并验证数据

据我所知,唯一的方法是使用自定义JCE提供程序,KeyStore和签名类获取KeyStore。

我找到了来自Nikolay Elenkov的博客,特别是这篇文章真的帮助我理解了智能卡通信。感谢那。 http://nelenkov.blogspot.de/2013/10/signing-email-with-nfc-smart-card.html

我尝试实现自定义JCE提供程序和自定义KeyStore和签名类来编写自定义身份验证。 我的提供商基于文档(http://docs.oracle.com/javase/6/docs/technotes/guides/security/crypto/HowToImplAProvider.html),但在Android上我得到了这个例外:

 SSL Context Exceptionjava.security.NoSuchAlgorithmException: KeyStore mypkcs11 implementation not found

这是我的自定义提供商:

public class PKCS11_Custom_Provider extends AuthProvider {


public PKCS11_Custom_Provider(){
    super("Custom_p", 1.0, "Custom_p");

    AccessController.doPrivileged(new java.security.PrivilegedAction() {
        public Object run() {


            put("KeyStore.mypkcs11",
                    "Pathtomyclass.P11KeyStore");
            put("Signature.mypkcs11",
                    "Pathtomyclass.P11Signature");

            return null;
        }
    });

}...

这是我的KeyStore实现:

 PKCS11_Custom_Provider myProvider = new PKCS11_Custom_Provider();
 Security.insertProviderAt(myProvider, 2);
 KeyStore ks = KeyStore.getInstance("myPKCS11", myProvider);

在使用NetBeans的JDK 1.7上,代码工作正常,但在Android上我总是遇到此异常。

我该如何解决这个问题?

0 个答案:

没有答案