Certificado de certificado okHTTP cuadrado – error sslSocketFactory

Estoy intentando importar mi propio archivo de BKS, que contiene mi certificado auto firmado pero estoy funcionando en apuro con okHTTP. Quiero hacer esto con el archivo bks, también lo tengo trabajando a través de la sha512 /.

Tengo este código de varios tutoriales y sé que el problema es, pero no puedo solucionarlo.

import android.content.Context; import android.util.Log; import java.io.InputStream; import java.security.KeyStore; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManagerFactory; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public class Pinning { Context context; public static String TRUST_STORE_PASSWORD = "your_secret"; private static final String ENDPOINT = "https://api.yourdomain.com/"; public Pinning(Context c) { this.context = c; } private SSLSocketFactory getPinnedCertSslSocketFactory(Context context) { try { KeyStore trusted = KeyStore.getInstance("BKS"); InputStream in = context.getResources().openRawResource(R.raw.mytruststore); trusted.load(in, "mypass".toCharArray()); SSLContext sslContext = SSLContext.getInstance("TLS"); TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance( TrustManagerFactory.getDefaultAlgorithm()); trustManagerFactory.init(trusted); sslContext.init(null, trustManagerFactory.getTrustManagers(), null); return sslContext.getSocketFactory(); } catch (Exception e) { Log.e("MyApp", e.getMessage(), e); } return null; } public void makeRequest() { try { OkHttpClient client = new OkHttpClient().sslSocketFactory(getPinnedCertSslSocketFactory(this.context)); Request request = new Request.Builder() .url(ENDPOINT) .build(); Response response = client.newCall(request).execute(); Log.d("MyApp", response.body().string()); } catch (Exception e) { Log.e("MyApp", e.getMessage(), e); } } } 

Ahora estoy consiguiendo el error siguiente dentro de la línea siguiente:

 OkHttpClient client = new OkHttpClient().sslSocketFactory(getPinnedCertSslSocketFactory(this.context)).; 

ERROR:

SSLSocketFactory en okHTTPClient no se puede aplicar a javax.net.SSLSocketFactory.

Si usted mira dentro de las importaciones usted ve los 3 siguientes de javax.

 import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManagerFactory; 

Así que tengo un missmatch. Parece que necesito un okHTTP – sslSocketFactory con mi archivo bks. Pero no puedo encontrar una explicación de trabajo para eso. También estoy usando okHTTP 3.3.1

 compile 'com.squareup.okhttp3:okhttp:3.3.1' 

Encontré esa explicación / solución aquí: ¿Cómo puedo fijar un certificado con OKHTTP cuadrado? . Como se mencionó antes. Quiero utilizar el archivo bks, no el método sha512 /.

Por lo tanto necesito saber, cómo analizar que javax.ssl.Factory en el okHTTP-sslFactory o cómo crear un okHTTPsslFactory con el archivo de generar bks.

Además, el método setSSLSocketFactory ya no está disponible en okHTTP 3.1.1.

¡Realmente aprecio su ayuda y gracias por tomarse el tiempo para hacer esta pregunta!

En su lugar, debería utilizar la siguiente sintaxis

 OkHttpClient client = new OkHttpClient.Builder() .sslSocketFactory(getPinnedCertSslSocketFactory(this.context)) .build(); 

¡Espero eso ayude!

  • CertPathValidatorException: Ancla de confianza para ruta de certificación no encontrada
  • ¿Cómo puedo hacer peticiones simultáneas más rápido con Retrofit / OkHttp?
  • Cómo obtener el cuerpo de la respuesta en okhttp cuando el código es 401
  • OkHttp código de estado de respuesta en el método onFailure
  • Caché de datos de respuesta con retrofit2 + okhttp3
  • If-None-Match no se pasa en mi solicitud
  • Android Retrofi 2, las diferencias entre addInterceptor y addNetworkInterceptor para editar las respuestas
  • Crear una dependencia gradle - eliminar el acceso a sus propias dependencias
  • OkHttp PublicKey pinning en Android
  • Retrofit: el servidor devuelve tanto ETag como Cache-Control: max-age = 60. ¿No debería utilizarse la memoria caché si se solicita <60s?
  • Deslizamiento con la integración okhttp3 java.lang.NoClassDefFoundError
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.