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

Gen*_*mes 7 java encryption android openssl

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

为了进行呼叫和传输数据,WebRTC KeyPair为每次呼叫创建并使用单个数据.但我想使用自定义KeyPairAndroidKeyStore.对于这个问题,我需要发送自己KeyPair的OpenSSL共享对象才能工作.

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

bool OpenSSLIdentity::ConfigureIdentity
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

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


AndroidKeyStore

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


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

Ale*_*bin 2

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

  • 将 Android 密钥库 PrivateKey + 签名或密码呈现为 OpenSSL EVP_PKEY。

  • 不要使用 Android 密钥库。与在进程中存储私钥相比,也许您不需要它提供的额外保护?