Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

260
Views
¿Cómo dar certificado a Java Websocket?

Perdóneme por la pregunta del novato, pero estoy confundido y obviamente no entiendo los fundamentos o las explicaciones de cómo usar un servidor Websocket alojado en HTTPS . Todo lo que encuentro en línea me lleva a tener más preguntas que respuestas.

Tengo un servidor Websocket alojado en mi sitio web HTTPS usando código Java.

Este es mi archivo WebsocketServer.java :

 import org.java_websocket.WebSocket; import org.java_websocket.handshake.ClientHandshake; import org.java_websocket.server.WebSocketServer; import java.net.InetSocketAddress; import java.util.HashSet; import java.util.Set; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class WebsocketServer extends WebSocketServer { private static final Logger logger = LogManager.getLogger(WebsocketServer.class); private static int TCP_PORT = 6868; private static Set<WebSocket> conns; public WebsocketServer() { super(new InetSocketAddress(TCP_PORT)); conns = new HashSet<>(); } @Override public void onOpen(WebSocket conn, ClientHandshake handshake) { conns.add(conn); logger.info("New connection from " + conn.getRemoteSocketAddress().getAddress().getHostAddress()); logger.info("Size of connection list: " + conns.size()); } @Override public void onClose(WebSocket conn, int code, String reason, boolean remote) { conns.remove(conn); logger.info("Closed connection to " + conn.getRemoteSocketAddress().getAddress().getHostAddress()); } @Override public void onMessage(WebSocket conn, String message) { logger.info("Message from client: {}", message); // for (WebSocket sock : conns) { // sock.send("SENDING BACK" + message); // } } @Override public void onError(WebSocket conn, Exception ex) { // ex.printStackTrace(); try { if (conn != null) { conns.remove(conn); // do some thing if required } logger.info("ERROR from {}", conn.getRemoteSocketAddress().getAddress().getHostAddress()); } catch (Exception e) { logger.info("onError: WebSocketServer may already be running"); } } public Set<WebSocket> getConns() { return conns; } }

Luego comencé el WebsocketServer así:

 WebsocketServer websocketServer; // Start socket server websocketServer = new WebsocketServer(); websocketServer.start();

Y en el lado del cliente, me conecto así:

 // APP_WEB_SOCKET is the url to my site: api.my_custom_domain.com var connection = new WebSocket("wss://" + APP_WEB_SOCKET + ":6868");

PREGUNTAS: sigo leyendo que necesito un certificado si quiero usar wss sobre HTTPS , pero no puedo encontrar ningún documento que explique lo que esto significa de una manera que pueda entender.

Mi aplicación está alojada en el entorno de AWS Elastic Beanstalk. ¿Debo agregar de alguna manera un certificado a la configuración de WebsocketServer en mi código Java? Ejemplo:

 WebsocketServer websocketServer; // Start socket server websocketServer = new WebsocketServer(); // example guessing websocketServer.cert = "SOMETHING";?? websocketServer.start();

¿Es necesario cambiar el código de cliente?

¿Quién necesita el certificado?

Si alguien pudiera explicarme lo que me estoy perdiendo o indicarme la dirección correcta, se lo agradecería mucho.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Manténgalo fácil.
Los certificados dentro de su aplicación son complejos: son difíciles de administrar y tendrá problemas para ejecutar su aplicación en un entorno de nube moderno (iniciar nuevos entornos, renovar certificados, escalar su aplicación, ...).

Conclusión simple: no implemente ningún certificado.

¿Cómo obtener conexiones encriptadas?

Como Mike ya señaló en los comentarios: los WebSockets son simplemente conexiones HTTP(S) actualizadas. Un servidor web normal (nginx, apache) se encarga de los certificados. Se puede hacer en kubernetes (como controlador de entrada) o con un servidor web "bare-metal".
Ambos deberían actuar como un proxy inverso. Esto significa: su aplicación Java no sabe nada sobre certificados. Solo tiene conexiones sin cifrar, como en su código en el puerto 6868 .
Pero el cliente no utilizará este puerto. 6868 solo es accesible internamente.

El cliente llamará a su proxy inverso en el puerto HTTPS normal (=443). El proxy inverso reenviará la conexión a su aplicación Java.

Aquí algunos enlaces para más información:

  • proxy inverso nginx
  • proxy inverso nginx para websocket
  • tutorial para java detrás de proxy inverso
  • LetsEncrypt para certificados automáticos y gratuitos
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!