问题描述
我正在通过将证书安全地存储在JNI中并在运行时获取证书来使证书固定。但是当我从JNI获取数据时,我得到了BAD_PKCS12_DATA(pkcs8_x509.c:626),errno = 0)
。如果我直接在Flutter代码中设置它,则固定会起作用
List<int> _crt = <int>[45,45,66,69,71,73,78,...]
这是JNI方法:
extern "C" JNIEXPORT jintArray JNICALL Java_com_package_android_MainActivity_getCert
(jnienv *env,jobject This)
{
int a[] ={45,...};
jintArray ret = env->NewIntArray(sizeof(a));
env->SetIntArrayRegion(ret,6,a);
return ret;
}
MainActivity.kt:
external fun getCert(): IntArray
override fun configureFlutterEngine(@NonNull FlutterEngine: FlutterEngine) {
super.configureFlutterEngine(FlutterEngine)
MethodChannel(FlutterEngine.dartExecutor.binaryMessenger,CHANNEL).setMethodCallHandler {
call,result ->
if (call.method == "cert") {
result.success(getCert())
}
}
}
颤振代码:
List<int> _crt;
_crt = await _platform.invokeMethod("cert");
//print("CRT: " + _crt.length);
SecurityContext context = SecurityContext(withTrustedRoots: true);
context.setTrustedCertificatesBytes(_crt);
httpClient = new HttpClient(context: context);
我很困惑,为什么从JNI返回的int数组不起作用,但是如果直接在Flutter中直接设置它,也不会有问题?
解决方法
sizeof(a)
不能提供a
中元素的数量。它提供了所有元素的总大小,以字节为单位。
您想要的是sizeof(a) / sizeof(int)
或sizeof(a) / sizeof(a[0])
。