3

このリンクを使用して、Android用のcurlとopensslをクロスビルドしました。AndroidでcURLを使用して..正常にビルドできます。そして今、私は自分のアプリケーションを実行しようとしています、私のアプリケーションでは自分の証明書を追加する必要があります、ネイティブコードを介してSDカードに保存されている証明書を追加しようとすると、curlから次のエラー応答がありますすなわちCURLE_SSL_CERTPROBLEM (58)=>ローカルクライアント証明書の問題。以下のアプリケーションですべての証明書を削除し、証明書なしで単純なhttps curlクライアントを使用すると、次のエラーCURLE_SSL_CACERT_BADFILE(77)が発生します。

ここにコードを入れました。その中で、sdcardから証明書を読み取ろうとしています(sdcardにコピーして貼り付けました)。

証明書を正しくロードしていますか?

//JavaからWebページを受信するインターフェース機能

  {
  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");
}
} 
4

1 に答える 1

2

この行を追加する必要があります

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

curl_config.hlibCurlを構築している間。

于 2012-09-20T14:27:08.013 に答える