我有使用WebRTC的Android应用程序。一切都很完美。但现在,主要问题是加密。
为了拨打电话和传输数据,WebRTC为每次通话创建并使用一个KeyPair
。但我想使用KeyPair
中的自定义AndroidKeyStore
。对于这个问题,我需要将自己的KeyPair
发送给OpenSSL共享对象才能工作。
修复将在NATIVE OpenSSL代码中,其中WebRTC使用此函数(opensslidnetity.cc
)获取加密数据的OpenSSL上下文:
bool OpenSSLIdentity::ConfigureIdentity
{
...
}
如何将PK从AndroidKeyStore转移到WebRTC本机代码? 另一种情况,如何为WebRTC加密设置自定义PK?
AndroidKeyStore
在Java中,我可以打开KeyStore(AndroidKeyStore
)并获取准备传输的公钥(具有方法的密钥字节 - getEncoded()
)。此外,我可以获取加密数据的私钥,但我无法以字节为单位发送此密钥,因为getEncoded()
返回null。在这种情况下,我想,我可以得到PublicKey
和PrivateKey
并将它们保存在字节数组中。然后,在本机代码中调用准备好的方法。
更新:google.source.chromium中有类似的内容。他们从Android KeyStore获取密钥并在本机代码中创建OpenSSL上下文。用于获取和使用AndroidKeyStore for TLS的本机类 - Link 1和Link 2。
答案 0 :(得分:2)
Android Keystore不会按设计公开私钥或密钥的密钥材料(请参阅https://developer.android.com/training/articles/keystore.html)。您可以选择:
将Open Keystore PrivateKey +签名或密码呈现为OpenSSL EVP_PKEY。
请勿使用Android Keystore。与将私钥存储在流程中相比,您可能不需要提供额外的保护措施吗?