El comando StartTLS (también conocido como “Op­po­r­tu­ni­s­tic TLS”) amplía el protocolo Transport Layer Security (TLS) para cifrar la tra­n­s­mi­sión de in­fo­r­ma­ción mediante este mismo protocolo.

¿Cómo funciona StartTLS?

Como extensión del protocolo TLS, StartTLS ofrece una gran ventaja: no in­te­r­fie­re en la co­mu­ni­ca­ción con clientes que no son co­m­pa­ti­bles con este método. Esto significa que hay muchos menos problemas de co­m­pa­ti­bi­li­dad. No obstante, si un servidor rechaza el uso de TLS, el cliente de correo debe poder decidir si continuar sin cifrado o cancelar la tra­n­s­mi­sión. Otra de las ventajas reside en lane­go­cia­ción bilateral, lo que permite que, en caso de fallo en la co­mu­ni­ca­ción, los procesos puedan actuar au­to­má­ti­ca­me­n­te sin necesidad de in­te­r­ve­n­ción por parte del ad­mi­ni­s­tra­dor o del usuario.

Con el pro­ce­di­mie­n­to StartTLS, la conexión siempre se establece sin cifrar, uti­li­za­n­do el puerto destinado a la tra­n­s­mi­sió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 pro­ce­di­mie­n­to, en caso de error en la co­mu­ni­ca­ción, no es necesario cambiar de puerto, y el cliente puede seguir uti­li­za­n­do fá­ci­l­me­n­te el mecanismo StartTLS que ofrece el servidor de correo.

Imagen: Gráfico explicativo sobre el funcionamiento de StartTLS
StartTLS cifra la co­mu­ni­ca­ción entre dos se­r­vi­do­res de correo ele­c­tró­ni­co, siempre que ambos se­r­vi­do­res de correo admitan este protocolo.

Ejemplo: correo ele­c­tró­ni­co

Su­po­n­ga­mos que quieres cifrar un correo ele­c­tró­ni­co mediante TLS. Para ello, se elige StartTLS, ya que permite integrar el cifrado de forma sencilla en el fu­n­cio­na­mie­n­to normal del cliente de correo. La opción co­rre­s­po­n­die­n­te suele en­co­n­trar­se en los ajustes de cuenta del cliente de correo ele­c­tró­ni­co. Una vez se envía el mensaje, se inicia la co­mu­ni­ca­ción:

  1. El cliente envía una solicitud EHLO para consultar los métodos de cifrado di­s­po­ni­bles.
  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 ele­c­tró­ni­co con IONOS
Descubre una forma nueva de usar tu e-mail
  • Escribe correos ele­c­tró­ni­cos perfectos con ayuda de la IA (opcional)
  • Dominio gratis más asesor personal
  • Pro­te­c­ción contra virus y spam

Usos ha­bi­tua­les de StartTLS

StartTLS se utiliza como extensión de protocolo, pri­n­ci­pa­l­me­n­te en la co­mu­ni­ca­ción por correo ele­c­tró­ni­co, y es co­m­pa­ti­ble con los pro­to­co­los SMTP, IMAP y POP. Aunque HTTP cuenta con su propio mecanismo (es­pe­ci­fi­ca­do en el RFC 2817), su fu­n­cio­na­mie­n­to 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 pro­to­co­los de correo, StartTLS también puede uti­li­zar­se para iniciar un proceso de cifrado en los si­guie­n­tes pro­to­co­los:

Entre los pro­vee­do­res de servicios de Internet, StartTLS se ha co­n­so­li­da­do como el método de cifrado de correo ele­c­tró­ni­co más utilizado, ya que permite gestionar múltiples dominios y ce­r­ti­fi­ca­dos en un mismo servidor. Sin embargo, también es un pro­ce­di­mie­n­to algo co­n­tro­ve­r­ti­do, ya que ciertos datos pe­r­so­na­les, como la dirección IP del remitente, se tra­n­s­mi­ten ini­cia­l­me­n­te sin cifrar, y existe el riesgo de ataques man-in-the-middle, también conocidos como ataques de in­te­r­me­dia­rio, si el proveedor in­te­r­ce­p­ta y anula StartTLS sin que el usuario lo note.

Ventajas y de­s­ve­n­ta­jas de StartTLS

Las de­s­ve­n­ta­jas de StartTLS se hacen evidentes sobre todo en relación con el uso de software de seguridad. Por ejemplo, los co­r­ta­fue­gos o firewall deben analizar el tráfico a nivel de capa de apli­ca­ción para poder di­fe­re­n­ciar entre datos cifrados y no cifrados. Lo mismo ocurre con los se­r­vi­do­res proxy, que suelen funcionar mejor cuando pueden di­s­ti­n­gui­r­se los puertos, algo que no ocurre con StartTLS debido al uso de un solo puerto. Esto puede di­fi­cu­l­tar o incluso impedir el uso efectivo de técnicas de caching.

En cuanto a la pro­te­c­ción de datos, StartTLS también presenta ciertos in­co­n­ve­nie­n­tes. La mayoría de los clientes de correo están co­n­fi­gu­ra­dos 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 in­te­r­me­dia­rio o man-in-the-middle aumenta, ya que el operador de red podría bloquear si­le­n­cio­sa­me­n­te el comando StartTLS y así in­te­r­ce­p­tar los datos sin que el usuario lo note. Si el comando StartTLS no se ejecuta, los datos se tra­n­s­mi­ten sin cifrado, y no­r­ma­l­me­n­te el usuario no recibe ningún aviso al respecto.

Por ello, se re­co­mie­n­da realizar primero una prueba de ve­ri­fi­ca­ción, para ase­gu­rar­se de que el servidor realmente admite StartTLS. Solo después de confirmar este soporte debería uti­li­zar­se el pro­ce­di­mie­n­to de forma pre­de­te­r­mi­na­da. Si la conexión cifrada falla, pro­ba­ble­me­n­te se deba a un problema externo.

¿Cómo puedo comprobar el fu­n­cio­na­mie­n­to de StartTLS?

Los pro­to­co­los TLS utilizan di­fe­re­n­tes puertos en función del proveedor. Puesto que StartTLS se incorpora si­m­ple­me­n­te a la conexión sin necesidad de cambiar de puerto, el pro­ce­di­mie­n­to de cifrado puede co­m­pro­bar­se desde cualquier consola adecuada. De este modo, se co­m­pro­ba­rá qué puerto utiliza el proveedor para StartTLS. Con los si­guie­n­tes comandos, podrás, por ejemplo, comprobar en NetCat si un servidor de correo es co­m­pa­ti­ble 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 tra­n­s­mi­ten 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 au­te­n­ti­fi­ca­ción no resulta tan sencilla. Una solución habitual es el pro­ce­di­mie­n­to “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 “Au­the­ti­ca­tion succeeded”, la prueba habrá concluido con éxito. Aparte de estos, pueden eje­cu­tar­se otros comandos SMTP según el caso.

Consejo

¿Quieres probar StartTLS en servicios que no son co­m­pa­ti­bles con OpenSSL? En ese caso, la he­rra­mie­n­ta gnutls-cli (incluida en el paquete gnutls-bin) puede ser una buena al­te­r­na­ti­va.

Ir al menú principal