Certificado de Libcurl Pinning trabajando en el iPhone pero no en Android

Este es mi código C ++ que estoy usando en proyectos Obj-C y JAVA.

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); 

————————————————– ——————

En Xcode, tengo mi ceritificate "certificatePinning.der" almacenado en la carpeta Resources / Certificates.

Para utilizar el código anterior, establezco certificateBeingUsed en mi ruta de certificado:

 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" 

Y res devuelve el éxito con readBuffer contiene la respuesta enviada desde el servidor.

————————————————– ——————

En Android Studio, tengo mi ceritificate "certificatePinning.der" almacenado en la carpeta de activos. (Lo copio en la carpeta de datos antes de usarlo)

Para utilizar el código anterior, establezco certificateBeingUsed en mi ruta de certificado:

 certificateBeingUsed = "/data/data/packageName/certificatePinning.der" 

Pero res devuelve CURLE_SSL_CACERT_BADFILE (77) y readBuffer está vacío

————————————————– ——————

¿Qué es lo que me falta en Android que no pudo validar el certificado almacenado con el servidor?

NÓTESE BIEN:

  1. Tengo SSL soportado en libCurl.
  2. En android si lo pongo en el certificado cacert.pem que volverá el éxito, pero quiero usar mi certificado en su lugar.

Esto puede ser un problema con la codificación, intente convertir su archivo .der al formato .pem usando esto:

 openssl x509 -in cert.crt -inform der -outform pem -out cert.pem 
  • ¿Cómo construir OpenSSL como biblioteca compartida no versionada para Android?
  • Construir Android openssl usando NDK no hace los archivos de ensamblaje arm4 correctamente
  • Error de protocolo desconocido con conexión HTTPS en android
  • Mensaje de advertencia de Google Play y OpenSSL
  • Problema pasando byte a través de jni a C en Android
  • Cómo construir OpenSSL para generar libcrypto.a con Android NDK y Windows
  • openSSL usando los problemas de NDK de Android
  • Cómo construir Openssl para Android en Windows con ndk8?
  • Compila OpenSSL 1.1.0 para Android
  • El uso de la dirección IP para el nombre común en el certificado del servidor no funciona en Android?
  • SSLHandshakeException Ancla de confianza para ruta de certificación no encontrada Android HTTPS
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.