Добавление SSL-сертификатов для cCURL в Android имеет ошибки

С помощью этой ссылки я сделал кросс и openssl для Android. Использование cURL в Android ..
Я умею строить успешно. и теперь я пытаюсь запустить свое приложение, в моем приложении мне нужно добавить свои собственные сертификаты, когда я пытался добавить сертификаты, которые хранятся в SDCard через мой родной код ,Я получаю следующее сообщение об ошибке из-за проблемы curl, т.е. CURLE_SSL_CERTPROBLEM (58) => с сертификатом локального клиента. и если удалить все сертификаты в моем приложении ниже, и если я использую простой клиент https curl без сертификатов, получаю следующую ошибку CURLE_SSL_CACERT_BADFILE (77).

Здесь я положил свой код, и я просто пытаюсь прочитать сертификаты с SDCard (я скопировал и вставил в SDCard).

я загружаю сертификаты правильно?

// Функция интерфейса, которая будет получать веб-страницу с Java

  {
pageInfo_t page;
CURL *curl;
CURLcode res;
char *buffer;

static const char *pCertFile = "/mnt//sdcard/sslcerts/33330001-root.x509";
static const char *pCACertFile="/mnt//sdcard/sslcerts/root.x509.crt";
pKeyName  = "/mnt/sdcard/sslcerts/33330001-root-privkey.der";

const char *pKeyName;
const char *pKeyType;

const char *pEngine;
const jbyte *webpage;

pKeyType  = "DER";
pEngine   = NULL;

webpage = (*env)->GetStringUTFChars(env, webpageJStr, NULL);
if (webpage == NULL) {
return NULL; /* OutOfMemoryError already thrown */
}

page.data = (char *)malloc(16 * 1024);
page.len = 0;
if (page.data)
memset(page.data, 32, 16 * 1024);

buffer = (char *)malloc(1024);

curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, webpage);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, HTTPData);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &page);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);

curl_easy_setopt(curl,CURLOPT_SSLCERTTYPE,"DER");

curl_easy_setopt(curl,CURLOPT_SSLCERT,pCertFile);

curl_easy_setopt(curl,CURLOPT_SSLKEYTYPE,pKeyType);

curl_easy_setopt(curl,CURLOPT_SSLKEY,pKeyName);

curl_easy_setopt(curl,CURLOPT_CAINFO,pCACertFile);

curl_easy_setopt(curl,CURLOPT_SSL_VERIFYPEER,1L);
res = curl_easy_perform(curl);
/* always cleanup */
curl_easy_cleanup(curl);
(*env)->ReleaseStringUTFChars(env, webpageJStr, webpage);
if(res == 0) {
if (buffer) {
page.data[page.len < 256 ? page.len : 256] = '\0';
sprintf(buffer, "pagedata(%d): %s. done.\n", page.len, page.data);
return (*env)->NewStringUTF(env, buffer);
}
}
sprintf(buffer, "Result %d", res);
return (*env)->NewStringUTF(env, buffer);
} else {
return (*env)->NewStringUTF(env, "Unable to init cURL");
}
}

3

Решение

Вам необходимо добавить эту строку

#define CURL_CA_BUNDLE "/etc/ssl/certs/ca-certificates.crt"

в curl_config.h при сборке libCurl.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]