Libcurl证书固定工作在iPhone上,但不是在Android上

Libcurl Certificate Pinning working on iPhone but not on Android

本文关键字:Android iPhone 证书 工作 Libcurl      更新时间:2023-10-16

这是我在Obj-C和JAVA项目中使用的c++代码。

string readBuffer;
string certificateBeingUsed;
CURL *curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(curl, CURLOPT_URL, "https://apiServer");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 120);
curl_easy_setopt(curl, CURLOPT_ENCODING, GZIP);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER , true);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST , 2);
curl_easy_setopt(curl, CURLOPT_CAINFO,certificateBeingUsed);
CURLcode res;
res = curl_easy_perform(curl);

--------------------------------------------------------------------

在Xcode中,我有我的证书"certificatePinning.der"存储在资源/证书文件夹。

要使用上面的代码,我将certificateBeingUsed设置为我的证书路径:
certificateBeingUsed = "/Users/graceo/Library/Developer/CoreSimulator/Devices/1BB154CB-276B-4DDC-86C8-4975213D7E3B/data/Containers/Bundle/Application/4819EC2A-CA18-46BF-815F-445B5E3E519F/TestStoryBoardWithLibraryAndSwift.app/certificatePinning.der" 

res返回成功,readBuffer包含从服务器发送的响应。

--------------------------------------------------------------------

在Android Studio中,我的证书"certificatePinning.der"存储在资产文件夹中。(我在使用它之前把它复制到数据文件夹)

要使用上面的代码,我将certificateBeingUsed设置为我的证书路径:
certificateBeingUsed = "/data/data/packageName/certificatePinning.der" 

res返回CURLE_SSL_CACERT_BADFILE (77), readBuffer为空

--------------------------------------------------------------------

我在Android中缺少的是什么,无法验证与服务器存储的证书??

注:

    libCurl支持SSL
  1. 在android中如果我将其设置为证书证书。
  2. . pem它将返回成功,但我想使用我的证书代替。

这可能是编码问题,尝试使用以下命令将。der文件转换为。pem格式:

openssl x509 -in cert.crt -inform der -outform pem -out cert.pem