Conexión de socket SSL

¿Cómo puedo crear una conexión SSL Socket?

Realmente necesito crear un almacén de claves? Este keystore debe ser compartido con todas mis aplicaciones cliente?

Tengo crear un servidor con el código siguiente:

SSLServerSocketFactory sslserversocketfactory = (SSLServerSocketFactory) SSLServerSocketFactory .getDefault(); SSLServerSocket sslserversocket = (SSLServerSocket) sslserversocketfactory .createServerSocket(ServerProperties.getInstance() .getVSSPAuthenticationPort()); 

Tengo que crear un cliente en android con el siguiente código:

 SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory .getDefault(); SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket( host, authPort); sslsocket.startHandshake(); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter( sslsocket.getOutputStream())); BufferedReader reader = new BufferedReader(new InputStreamReader( sslsocket.getInputStream())); 

Pero cuando intento conectar, el error siguiente se lanza:

 javax.net.ssl.SSLHandshakeException: no cipher suites in common at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1886) at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276) at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:266) at sun.security.ssl.ServerHandshaker.chooseCipherSuite(ServerHandshaker.java:894) at sun.security.ssl.ServerHandshaker.clientHello(ServerHandshaker.java:622) at sun.security.ssl.ServerHandshaker.processMessage(ServerHandshaker.java:167) at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868) at sun.security.ssl.Handshaker.process_record(Handshaker.java:804) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323) 

Necesita un certificado para establecer una conexión ssl, puede cargar el certificado dentro de un almacén de claves o puede cargar el certificado en sí. Mostraré algunos ejemplos para la opción keystore.

Su código necesita algunos parámetros para ejecutarse:

 java -Djavax.net.ssl.keyStore=keyStoreFile -Djavax.net.ssl.keyStorePassword=keystorePassword Server 

También puede cargar el almacén de claves con código java, la solución más simple para esto es establecer las propiedades del sistema:

 System.setProperty("javax.net.ssl.keyStore", 'keystoreFile'); System.setProperty("javax.net.ssl.keyStorePassword", 'keystorePassword '); 

También puede cargar el almacén de claves de una manera diferente, es más complicado pero tiene la capacidad de hacer cosas más complejas:

 KeyStore ks = KeyStore.getInstance("JKS"); ks.load(new FileInputStream("keystoreFile"), "keystorePassword".toCharArray()); KeyManagerFactory kmf = KeyManagerFactory.getInstance("X509"); kmf.init(ks, "keystorePassword".toCharArray()); TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509"); tmf.init(ks); SSLContext sc = SSLContext.getInstance("TLS"); TrustManager[] trustManagers = tmf.getTrustManagers(); sc.init(kmf.getKeyManagers(), trustManagers, null); SSLServerSocketFactory ssf = sc.getServerSocketFactory(); SSLServerSocket s = (SSLServerSocket) ssf.createServerSocket(serverport); SSLSocket c = (SSLSocket) s.accept(); 

Para los clientes hay algunos cambios en las últimas líneas del código, las 3 últimas líneas serán reemplazadas por éstas:

 SSLSocketFactory ssf = sc.getSocketFactory(); SSLSocket s = (SSLSocket) ssf.createSocket(serverip, serverport); s.startHandshake(); 

Si desea cargar un almacén de claves para Android, el tipo tendrá que ser "BKS" y no "JKS". Puede encontrar fácilmente recursos para crear un almacén de claves.

  • ¿Qué usamos para la configuración de seguridad de red de Android N para un certificado auto-firmado?
  • SSL cambios en android kitkat mantener la conexión de trabajo?
  • Ejemplo de servicio Apache Thrift que utiliza HTTPS, en Python
  • El host remoto cerró la conexión durante el apretón de manos: Certificado Burp en Android
  • Cadena de confianza de Android SSL con certificados intermedios (Apache HttpClient 4.X)
  • Comodo SSL: ERR_CERT_AUTHORITY_INVALID en Chrome móvil y Opera móvil (Android)
  • Soporte de TLS v1.2 en Webview Android
  • Android - problemas de SSL en el emulador de estudio de Android, funciona bien en el teléfono
  • Variedad de errores HTTPs al comunicarse con el servidor desde la aplicación Android
  • Aceptar certificados SSL autofirmados-> donde configurar TrustManager predeterminado
  • Uso de un certificado autofirmado para crear una conexión cliente-servidor segura en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.