El comando StartTLS (también conocido como “Opportunistic TLS”) amplía el protocolo Transport Layer Security (TLS) para cifrar la transmisión de información mediante este mismo protocolo.

¿Cómo funciona StartTLS?

Como extensión del protocolo TLS, StartTLS ofrece una gran ventaja: no interfiere en la comunicación con clientes que no son compatibles con este método. Esto significa que hay muchos menos problemas de compatibilidad. No obstante, si un servidor rechaza el uso de TLS, el cliente de correo debe poder decidir si continuar sin cifrado o cancelar la transmisión. Otra de las ventajas reside en lanegociación bilateral, lo que permite que, en caso de fallo en la comunicación, los procesos puedan actuar automáticamente sin necesidad de intervención por parte del administrador o del usuario.

Con el procedimiento StartTLS, la conexión siempre se establece sin cifrar, utilizando el puerto destinado a la transmisión en texto plano. Solo cuando se ejecuta el comando StartTLS, el protocolo negocia el cifrado con el cliente de correo sin crear una conexión nueva. Gracias a este procedimiento, en caso de error en la comunicación, no es necesario cambiar de puerto, y el cliente puede seguir utilizando fácilmente el mecanismo StartTLS que ofrece el servidor de correo.

Imagen: Gráfico explicativo sobre el funcionamiento de StartTLS
StartTLS cifra la comunicación entre dos servidores de correo electrónico, siempre que ambos servidores de correo admitan este protocolo.

Ejemplo: correo electrónico

Supongamos que quieres cifrar un correo electrónico mediante TLS. Para ello, se elige StartTLS, ya que permite integrar el cifrado de forma sencilla en el funcionamiento normal del cliente de correo. La opción correspondiente suele encontrarse en los ajustes de cuenta del cliente de correo electrónico. Una vez se envía el mensaje, se inicia la comunicación:

  1. El cliente envía una solicitud EHLO para consultar los métodos de cifrado disponibles.
  2. El servidor responde con “250-STARTTLS” indicando que admite StartTLS.
  3. El cliente envía “STARTTLS” para iniciar el cifrado.
  4. El servidor responde con el código de estado “220 OK”.
Crea tu correo electrónico con IONOS
Descubre una forma nueva de usar tu e-mail
  • Escribe correos electrónicos perfectos con ayuda de la IA (opcional)
  • Dominio gratis más asesor personal
  • Protección contra virus y spam

Usos habituales de StartTLS

StartTLS se utiliza como extensión de protocolo, principalmente en la comunicación por correo electrónico, y es compatible con los protocolos SMTP, IMAP y POP. Aunque HTTP cuenta con su propio mecanismo (especificado en el RFC 2817), su funcionamiento es muy similar al de StartTLS. No obstante, hoy en día es más habitual el uso de HTTPS (RFC 2818).

Además de en los protocolos de correo, StartTLS también puede utilizarse para iniciar un proceso de cifrado en los siguientes protocolos:

Entre los proveedores de servicios de Internet, StartTLS se ha consolidado como el método de cifrado de correo electrónico más utilizado, ya que permite gestionar múltiples dominios y certificados en un mismo servidor. Sin embargo, también es un procedimiento algo controvertido, ya que ciertos datos personales, como la dirección IP del remitente, se transmiten inicialmente sin cifrar, y existe el riesgo de ataques man-in-the-middle, también conocidos como ataques de intermediario, si el proveedor intercepta y anula StartTLS sin que el usuario lo note.

Ventajas y desventajas de StartTLS

Las desventajas de StartTLS se hacen evidentes sobre todo en relación con el uso de software de seguridad. Por ejemplo, los cortafuegos o firewall deben analizar el tráfico a nivel de capa de aplicación para poder diferenciar entre datos cifrados y no cifrados. Lo mismo ocurre con los servidores proxy, que suelen funcionar mejor cuando pueden distinguirse los puertos, algo que no ocurre con StartTLS debido al uso de un solo puerto. Esto puede dificultar o incluso impedir el uso efectivo de técnicas de caching.

En cuanto a la protección de datos, StartTLS también presenta ciertos inconvenientes. La mayoría de los clientes de correo están configurados con la opción “usar TLS si es posible”, lo que hace que muchos usuarios no sepan si su conexión con el servidor está cifrada o no.

Además, el riesgo de ataques de intermediario o man-in-the-middle aumenta, ya que el operador de red podría bloquear silenciosamente el comando StartTLS y así interceptar los datos sin que el usuario lo note. Si el comando StartTLS no se ejecuta, los datos se transmiten sin cifrado, y normalmente el usuario no recibe ningún aviso al respecto.

Por ello, se recomienda realizar primero una prueba de verificación, para asegurarse de que el servidor realmente admite StartTLS. Solo después de confirmar este soporte debería utilizarse el procedimiento de forma predeterminada. Si la conexión cifrada falla, probablemente se deba a un problema externo.

¿Cómo puedo comprobar el funcionamiento de StartTLS?

Los protocolos TLS utilizan diferentes puertos en función del proveedor. Puesto que StartTLS se incorpora simplemente a la conexión sin necesidad de cambiar de puerto, el procedimiento de cifrado puede comprobarse desde cualquier consola adecuada. De este modo, se comprobará qué puerto utiliza el proveedor para StartTLS. Con los siguientes comandos, podrás, por ejemplo, comprobar en NetCat si un servidor de correo es compatible con el método de cifrado de StartTLS:

$ nc smtp.ionos.es 587
220 ejemplo.correo.es (mreue011) Nemesis ESMTP Service ready
ehlo test.local
250- ejemplo.correo.es Hello test.local [80.187.86.70]
250-8BITMIME
250-SIZE 141557760
250 STARTTLS
STARTTLS
220 OK
bash

Aquí debe aparecer el comando STARTTLS para activar el cifrado. También puedes ver que ciertos datos privados, como la dirección IP, se transmiten sin cifrado al principio de la conexión.

Con OpenSSL, el comando sería el siguiente:

$ openssl s_client -starttls smtp -connect smtp.ionos.es:587
CONNECTED(00000005)
[…]
SSL handshake has read 4650 bytes and written 1659 bytes
Verification: OK
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Protocol: TLSv1.3
Server public key is 3072 bit
This TLS version forbids renegotiation.
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
250 STARTTLS
bash

En el caso de SMTP, la autentificación no resulta tan sencilla. Una solución habitual es el procedimiento “AUTH PLAIN”, en el que los datos de acceso deben cifrarse en Base64. Puedes generar esta cadena con el siguiente comando en perl: $ perl -MMIME::Base64 -e 'print encode_base64("\000user-ju\000secret"). Después, debes enviar este código al servidor SMTP con el comando (AUTH PLAIN [Code]). Si el servidor responde con “Authetication succeeded”, la prueba habrá concluido con éxito. Aparte de estos, pueden ejecutarse otros comandos SMTP según el caso.

Consejo

¿Quieres probar StartTLS en servicios que no son compatibles con OpenSSL? En ese caso, la herramienta gnutls-cli (incluida en el paquete gnutls-bin) puede ser una buena alternativa.

¿Le ha resultado útil este artículo?
Ir al menú principal