Versión incorrecta de keystore en la llamada android
Quiero hacer una solicitud https.
Utilizo bouncycastle para generar el keystore como esto:
- Android: Google Map v2 no muestra mapa para la versión apk
- Perdió el alias del almacén de claves pero tiene el archivo y la contraseña utilizados para alias
- Al construir la versión de apk usando android studio, obtengo un error "Keystore fue manipulado, o la contraseña era incorrecta"
- ERROR: No se pudo leer la clave del almacén: ... No se puede recuperar la clave en Android Studio al generar APK firmado
- Keytool Signing Problem: Keystore fue manipulado, o la contraseña fue incorrecta
keytool -importcert -trustcacerts -alias ludevCA -file lu_dev_cert.crt -keypass mypass -keystore keystore.bks -storepass mypass -storetype BKS -providerclass org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath bcprov-jdk15on-146.jar
Y el comando keylist devuelve un valor correcto.
Pero cuando lo hago :
KeyStore ks = KeyStore.getInstance("BKS"); InputStream in = getResources().openRawResource(R.raw.keystore); ks.load(in, "mypass".toCharArray());
Tengo un error:
wrong version of keystore
Intenté usar varias versiones de bouncycast, pero el resultado es el mismo. También intenté definir keysize 1024, pero nada cambia.
Algunas ideas ?
- Consola para programadores de Android: una huella dactilar errónea tras la creación de la versión con Android Studio
- Buenas prácticas: ¿Cómo manejar las contraseñas del keystore en android / java?
- Almacenamiento de la clave con KeyStore en Android
- "Flujo no representa una tienda de claves PKCS12" después de almacenar con una nueva contraseña en el dispositivo Android
- no se puede conectar al servidor utilizando BKS keystore
- Java Keystore contraseña sin sentido?
- Firmar un apk como sistema usando las claves encontradas en source / build / target / product / security /
- Contrato Android desarrollador izquierda, la necesidad de actualizar la aplicación sin el keystore original - es posible?
Echa un vistazo a ello Android: confianza en los certificados SSL
-storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath /path/to/bouncycastle.jar
Y utilice esta versión al crear su almacén de claves: Versión 1.46 encontrada aquí
Que ayude …
No hay necesidad de hacer todo de nuevo!
Necesita cambiar el tipo de keystore, de BKS a BKS-v1 (BKS-v1 es una versión anterior de BKS). Debido a que la versión BKS cambió como se ha dicho aquí
Hay otra solución, que es mucho más fácil:
-
Usando Portecle:
- Descargas Portecle http://portecle.sourceforge.net/
- Abra su archivo bks con la contraseña y el portecle
- Herramientas >> Cambiar el tipo de almacén de claves >> BKS-v1
- Guarda el archivo
-
Puede utilizar KeyStore Explorer
El nuevo archivo será codificado con BKS-v1 y no mostrará más el error ….
Nota: Android funciona con diferentes versiones de BKS: por ejemplo, la API 15 requerirá BKS-1 en contra de la API 23 que requiere BKS, por lo que es posible que necesite colocar ambos archivos en su aplicación.
Nota 2: Puede utilizar este código:
int bks_version; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { bks_version = R.raw.publickey; //The BKS file } else { bks_version = R.raw.publickey_v1; //The BKS (v-1) file } KeyStore ks = KeyStore.getInstance("BKS"); InputStream in = getResources().openRawResource(bks_version); ks.load(in, "mypass".toCharArray());
Finalmente utilicé un editor gráfico (KeyStore Explorer) bajo Windows y está funcionando.
Tal vez el error fue causado por problemas de versión de Java / Mac
La solución está aquí, capaz de quitar la versión prolem
Creación de un archivo BKS para cliente android
Detalles de instalación del software necesarios para crear el archivo BKS:
Descargue el software Keystore Explorer desde el enlace http://keystore-explorer.sourceforge.net/
Descargar UnlimitedJCEPolicyJDK7 de http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
Extraiga zip y copie US_export_policy y local_policy en la carpeta C: / programes file / java / jre7 / lib / security.
Instale el software Keystore Explorer.
Pasos para generar un archivo BKS: (Necesita un archivo CA, un archivo de certificado, un archivo clave y un archivo .P12 iePKCS (si está disponible).
1) Creación de archivo Trust utilizando el archivo .crt de CA utilizando el software de keystore.
Pasos:
Abrir software
Go Archivo-> Nuevo-> seleccione .BKS del asistente Para importar el archivo de certificado de la CA Ir a la herramienta-> Importar certificado de confianza -> seleccionar archivo .crt de CA -> contraseña de entrada -> (Se lanzará una excepción si el certificado es autónomo) Importación archivo con fuerza.
4.Save archivo con extensión .bks.
2) Creación de archivo de clave utilizando el archivo .P12 utilizando software de keystore
Pasos
Abra el software Go File-> New-> seleccione .BKS desde el asistente
Importar> archivo p12 Ir a la herramienta -> Importar par de claves -> seleccionar PKCS # 12 desde el asistente -> ingresar contraseña de descripción para el archivo y las cejas archivo -> Escriba alise nombre (si desea cambiar otro puede mantener como está) contraseña
Guardar archivo con la extensión .bks.
3) Crear el archivo de la llave usando si .P12 no está disponible archivo usando el software del keystore
Pasos
Abrir software
Ir Archivo -> Nuevo-> Seleccionar .BKS del asistente Importar> Archivo p12 Ir Herramienta -> Importar par de claves -> Seleccionar OpenSSL del asistente -> Desmarque la contraseña decripción para el archivo, las cejas .key y .crt Archivo -> Ingrese el nombre del alise (si desea cambiar otro puede mantenerlo como está) -> Escriba la nueva contraseña
Guardar archivo con la extensión .bks.
Copiar el archivo en la carpeta res / raw (Ambos archivos BKS son compulsarry).
Código:
static final String ENABLED_CIPHERS[] = { "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", "TLS_DHE_RSA_WITH_AES_128_CBC_SHA", "TLS_DHE_RSA_WITH_AES_256_CBC_SHA", "TLS_DHE_DSS_WITH_AES_128_CBC_SHA", "TLS_ECDHE_RSA_WITH_RC4_128_SHA", "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", "TLS_RSA_WITH_AES_256_CBC_SHA", "TLS_RSA_WITH_AES_128_CBC_SHA", "SSL_RSA_WITH_3DES_EDE_CBC_SHA", "SSL_RSA_WITH_RC4_128_SHA", "SSL_RSA_WITH_RC4_128_MD5", }; // put this in a place where it can be reused static final String ENABLED_PROTOCOLS[] = { "TLSv1.2", "TLSv1.1", "TLSv1" }; private void sslCon() { try { // setup truststore to provide trust for the server certificate // load truststore certificate InputStream trustStoresIs = getResources().openRawResource(R.raw.client_ca); String trustStoreType = KeyStore.getDefaultType(); KeyStore trustStore = KeyStore.getInstance(trustStoreType); trustStore.load(trustStoresIs, "spsoft_123".toCharArray()); //keyStore.setCertificateEntry("ca", ca); // initialize trust manager factory with the read truststore String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm); tmf.init(trustStore); // setup client certificate // load client certificate InputStream keyStoreStream = getResources().openRawResource(R.raw.client_cert_key); KeyStore keyStore = null; keyStore = KeyStore.getInstance("BKS"); keyStore.load(keyStoreStream, "your password".toCharArray()); KeyManagerFactory keyManagerFactory = null; keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); keyManagerFactory.init(keyStore, "your password".toCharArray()); // Create an SSLContext that uses our TrustManager SSLContext context = SSLContext.getInstance("SSL"); context.init(keyManagerFactory.getKeyManagers(), tmf.getTrustManagers(), null); SSLSocketFactory sslsocketfactory = (SSLSocketFactory)context.getSocketFactory(); InetAddress serverAddr = InetAddress.getByName("192.168.11.104"); sslSocket = (SSLSocket) sslsocketfactory.createSocket(serverAddr, 5212); //String[] ciphers = sslSocket.getEnabledCipherSuites(); sslSocket.setEnabledCipherSuites(ENABLED_CIPHERS); // put this right before setEnabledCipherSuites()! //sslSocket.setEnabledProtocols(ENABLED_PROTOCOLS); //InputStream inputStream = sslSocket.getInputStream(); OutputStream out = sslSocket.getOutputStream(); Toast.makeText(getApplicationContext(), "Connected", Toast.LENGTH_SHORT).show(); sslSocket.close(); } catch (KeyManagementException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (CertificateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (KeyStoreException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnrecoverableKeyException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Estoy publicando esta respuesta para proporcionar una versión cmdline para convertir un archivo .pkcs12 a keystore.bks
Qué se necesita:
- Portecle – descargue desde https://sourceforge.net/projects/portecle/
Si no sabe cómo generar un archivo .PKCS12, consulte estos sitios:
- http://www.robinhowlett.com/blog/2016/01/05/everything-you-ever-wanted-to-know-about-ssl-but-were-afraid-to-ask/
- https://www.sslshopper.com/article-most-common-java-keytool-keystore-commands.html
Para esta Muestra, utilizo jetty.pkcs12 como fuente. El comando genera: keystore.bks /usr/local/share/java/portecle-1.9/ es la ruta donde he instalado la herramienta Portecle-Tool (.ZIP) descargada
keytool -importkeystore -srckeystore jetty.pkcs12 \ -srcstoretype PKCS12 -deststoretype BKS -providerpath \ /usr/local/share/java/portecle-1.9/bcprov.jar -provider \ org.bouncycastle.jce.provider.BouncyCastleProvider-destkeystore \ keystore.bks
Ahora puedes usar el BKS-Keystore en Android
Gracias a la anterior publicación he podido encontrar una solución y proporcionar este cmd. Espero que ayude a alguien!
- Cómo cambiar el tamaño de AlertDialog en la pantalla del teclado
- Android: ScrollView no se desplaza con el teclado fuera