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.
- NoClassDefFoundError: Resolución fallida de: Lokhttp3 / internal / Platform
- Okhttp ignora la configuración de Dispatcher cuando se usa con Retrofit RxJavaCallAdapterFactory
- OkHttp 3 y HttpURLConnection
- Retrofit v2 ¿Call.cancel () elimina la devolución de llamada?
- "Return response.body (). String ()" está vacío con okhttp3
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!
- ¿Cómo publico datos usando la biblioteca okhttp con el tipo de contenido x-www-form-urlencoded?
- OKhttp: SSLProtocolException: Protocolo de enlace SSL finalizado
- Enlace SSL mediante Google Volley
- OKHTTP 3 Seguimiento del progreso de subida de varias partes
- Java.net.SocketTimeoutException: timeout
- Okhttp siempre reintento conexión fallida
- OkHttpClient tiene un recuento máximo de reintentos
- ¿Cómo establezco el tiempo de espera para OkHttpClient?
En su lugar, debería utilizar la siguiente sintaxis
OkHttpClient client = new OkHttpClient.Builder() .sslSocketFactory(getPinnedCertSslSocketFactory(this.context)) .build();
¡Espero eso ayude!