【发布时间】:2016-09-28 00:30:55
【问题描述】:
我有使用 WebRTC 的 Android 应用程序。一切都很完美。但现在,主要问题是加密。
为了进行呼叫和传输数据,WebRTC 会为每个呼叫创建并使用一个 KeyPair。但我想使用来自AndroidKeyStore 的自定义KeyPair。对于这个问题,我需要将自己的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 上下文的位置。用于获取和使用用于 TLS 的 AndroidKeyStore 的本机类 - Link 1 和 Link 2。
【问题讨论】:
-
我认为亚历克斯是对的。但是,您可以使用反射做很多有趣的事情。
-
我不这么认为,因为它是加密工作的,并且基于native的java实现......如果有反射它会那么容易,没有保护......
-
请确保我对标题的编辑是正确的。我虽然您使用的是 Java,然后通过 JNI 调用 OpenSSL(或其他共享对象)。但听起来我错了。
-
没关系,感谢您的有用编辑..
标签: java android encryption openssl