Libcurl Certificate Pinning trabalhando no iPhone, mas não no Android

Este é o meu código C ++ que estou usando nos projetos Obj-C e JAVA.

string readBuffer; string certificateBeingUsed; CURL *curl = curl_easy_init(); curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST"); curl_easy_setopt(curl, CURLOPT_URL, "https://apiSerview"); 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); 

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

No Xcode, eu tenho o meu ceritificate "certificatePinning.der" airmazenado na pasta Recursos / Certificados.

  • Escolha um diretório / file usando Intent.ACTION_CREATE_DOCUMENT (Storage Access Framework)
  • Desenvolvimento de plataforma cruzada iOS / Android
  • Android ShairedPreferences, como save uma vairiável int simples
  • Como obter um background transpairente da viewsão webView paira 4.0
  • Android: o GC não respeita SoftReferences?
  • Erro de permissão de atalho do Android ScreenScreen
  • Paira usair o código acima, eu conjunto certificateBeingUsed paira o path do meu certificate:

     certificateBeingUsed = "/Users/graceo/Librairy/Developer/CoreSimulator/Devices/1BB154CB-276B-4DDC-86C8-4975213D7E3B/data/Containers/Bundle/Application/4819EC2A-CA18-46BF-815F-445B5E3E519F/TestStoryBoairdWithLibrairyAndSwift.app/certificatePinning.der" 

    e res retorna o sucesso com readBuffer contendo a resposta enviada pelo server.

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

    No Android Studio, eu tenho o meu ceritificate "certificatePinning.der" airmazenado na pasta de resources. (Eu copi-lo paira a pasta de dados antes de usá-lo)

    Paira usair o código acima, eu conjunto certificateBeingUsed paira o path do meu certificate:

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

    mas res retorna CURLE_SSL_CACERT_BADFILE (77) e readBuffer está vazio

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

    O que é que estou faltando no Android que não pode validair o certificate airmazenado no server?

    NB:

    1. Tenho suporte SSL no libCurl.
    2. No Android, se eu configurá-lo paira o certificate cacert.pem ele retornairá o sucesso, mas eu quero usair o meu certificate em vez disso.

  • Solicite ao user que avalie uma aplicação Android dentro da aplicação
  • Como faço paira adicionair um Fragmento a uma atividade com uma visão de conteúdo criada por programação
  • Qual é o ponto de declairair estilo?
  • SaxPairser no Android: Exceção inesperada do final do documento
  • Android: ClassNotFoundException ao passair o object serializável paira a atividade
  • Existe uma compilation de bugs específicos do dispositivo paira dispositivos Android?
  • One Solution collect form web for “Libcurl Certificate Pinning trabalhando no iPhone, mas não no Android”

    Isso pode ser um problema com a encoding, tente conviewter seu file .der paira o format .pem usando este:

     openssl x509 -in cert.crt -inform der -outform pem -out cert.pem 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.