从KeyStore传输PrivateKey,在OpenSSL中使用JNI

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从KeyStore传输PrivateKey,在OpenSSL中使用JNI相关的知识,希望对你有一定的参考价值。

我有使用WebRTC的android应用程序。一切都很完美。但现在,主要问题是加密。

为了拨打电话和转接数据,WebRTC为每次通话创建并使用单个KeyPair。但我想使用来自KeyPair的自定义AndroidKeyStore。对于这个问题,我需要将自己的KeyPair发送给OpenSSL共享对象才能工作。

修复程序将在NATIVE OpenSSL代码中,其中WebRTC使用此函数获取加密数据的OpenSSL上下文(opensslidnetity.cc):

bool OpenSSLIdentity::ConfigureIdentity
{
    ...
}

如何将PK从AndroidKeyStore转移到WebRTC本机代码?另一种情况,如何为WebRTC加密设置自定义PK工作?


AndroidKeyStore

在Java中,我可以打开KeyStore(AndroidKeyStore)并获取准备传输的公钥(具有方法的密钥字节--getEncoded())。此外,我可以获取加密数据的私钥,但我无法以字节为单位发送此密钥,因为getEncoded()返回null。在这种情况下,我想,我可以得到PublicKeyPrivateKey并将它们保存在字节数组中。然后,在本机代码中调用准备好的方法。


更新:google.source.chromium中有类似的内容。他们从Android KeyStore获取密钥并在本机代码中创建OpenSSL上下文。获取和使用AndroidKeyStore for TLS的本机类 - Link 1Link 2

答案

Android Keystore不会公开设计私钥或密钥的密钥材料(请参阅https://developer.android.com/training/articles/keystore.html)。您的选择是:

  • 将Android Key Key PrivateKey + Signature或Cipher作为OpenSSL EVP_PKEY呈现。
  • 不要使用Android Keystore。与在存储过程中存储私钥相比,您可能不需要提供额外的保护吗?

以上是关于从KeyStore传输PrivateKey,在OpenSSL中使用JNI的主要内容,如果未能解决你的问题,请参考以下文章

java 从 PKCS12(比如pfx格式)证书中提取私钥证书(PrivateKey)和受信任的公钥证书(X509Certificate)的序列号(SerialNumber)

多个openstack合并成一个openstack的多个region

java.security

tibco server keystore使用多域名证书

[转]简单科普私钥地址助记词Keystore的区别

从 base64 字符串 ECDSA 私钥创建 PrivateKey