在android ndk curl应用程序中包含openssl证书

时间:2012-10-11 16:37:05

标签: android-ndk openssl libcurl

由于Android不支持新的openssl,我的应用程序之一需要使用openssl 1.0.1c,因此我想到了交叉构建openssl和curl到android。我已经通过此链接Using cURL in Android交叉构建了用于android的curl和openssl ..我能够成功构建并获得共享库。现在我正在尝试运行我的应用程序,在我的应用程序中我需要添加自签名证书,当我尝试通过我的本机culr clienr代码添加存储在sdcard中的证书时,我收到以下错误响应curl ie CURLE_SSL_CERTPROBLEM(58)=>本地客户端证书的问题。

我在x86 linux PC上测试了这个应用程序,我的应用程序运行正常。

这里我已经放了我的curl setoption代码,并且我只是想从sdcard读取证书

下面是我试图设置证书的卷曲设置选项

curl_easy_setopt(curl,CURLOPT_SSLCERTTYPE,"DER");
curl_easy_setopt(curl,CURLOPT_SSLKEYTYPE,"DER")
curl_easy_setopt(curl,CURLOPT_SSLCERT,/sdcard/sslcerts/mycert.der);
curl_easy_setopt(curl,CURLOPT_SSLKEY,/sdcard/sslcerts/mykey.der);
curl_easy_setopt(curl,CURLOPT_CAINFO,/sdcard/sslcerts/mycacert.root);
curl_easy_setopt(curl,CURLOPT_CAPATH,/sdcard/sslcerts/);

我是否按照正确的方法在android ndk级别设置证书?由于使用了这个应用程序库,我的java应用程序还有其他一些方法来加载证书。

1 个答案:

答案 0 :(得分:0)

如果在没有SD卡的设备上运行,您的应用就会中断。首次运行时,最好将必要的文件从app资产复制到应用程序的数据文件夹中。

根据您使用NDK(NativeActivity与Java活动)的方式,您可以从C或Java中执行此操作。无论哪种方式都有效。

另外,请考虑使用Java的HTTP堆栈。它已经存在并支持SSL,无需将额外的代码拖入项目中。

这里有一个相关的例子:Load files bigger than 1M from assets folder除了你不需要将证书拆分成许多文件,因为它们不会大约1 MB。