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.
- Utilice la función PHP openssl_verify () para verificar Firma y datos creados por Android Client APP
- Construyendo OpenSSL para Android (ARMv7) en Win32
- Convertir un archivo .pk8 en archivo .key
- OpenSSL compilado para ejecutarse en la arquitectura x86 de Android
- Cómo utilizar OpenSSL Library en la aplicación ANDROID
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:
- Tengo SSL soportado en libCurl.
- En android si lo pongo en el certificado cacert.pem que volverá el éxito, pero quiero usar mi certificado en su lugar.
- No se puede crear una biblioteca externa de OpenSSL para Android NDK en Windows / Cygwin
- Construye la librería Android-openssl para la plataforma 2.1
- Android construir PJSIP con openssl
- Compila OpenSSL para Android con Bazel
- Transferencia PrivateKey de KeyStore, uso en OpenSSL con JNI
- Android HttpsUrlConnection javax.net.ssl.SSLException La conexión se cerró por el error del apretón de manos del par al usar el truststore local
- Cómo construir openssl en android
- Construcción de BoringSSL y Conscrypt y agrupación con Android apk
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
- ¿Es esto cómo programar un método java para que se ejecute 1 segundo después?
- Las últimas herramientas de ADT y sdk instaladas pero todavía están solicitando las últimas herramientas de sdk