Aprende Rust · 4 min
rustls: TLS moderno escrito en Rust
Qué es rustls, sus ventajas frente a OpenSSL y los matices que conviene conocer.
TLS es el protocolo que cifra casi todo el tráfico web. Durante décadas, la implementación de referencia fue OpenSSL, escrita en C. rustls es una alternativa moderna: hace el procesamiento del protocolo en Rust, con seguridad de memoria, y con una API más simple de usar correctamente.
Qué ofrece
Según su propia documentación, en rustls todo el procesamiento del protocolo es Rust 100% seguro en memoria. Esto no es un detalle menor. Buena parte de las vulnerabilidades históricas de las bibliotecas TLS en C son errores de manejo de memoria —desbordamientos, lecturas fuera de límites— que en Rust seguro no pueden ocurrir. Es el mismo tipo de garantía que explicamos en el código unsafe de Rust: lo que no está marcado como unsafe no incurre en esa clase de fallos.
Sus puntos fuertes:
| Aspecto | rustls |
|---|---|
| Lenguaje | Rust, con el procesamiento del protocolo en código seguro en memoria. |
| Versiones de TLS | TLS 1.2 y TLS 1.3. |
| Backend criptográfico | aws-lc-rs (recomendado) o ring. |
| FIPS | Opciones aprobadas FIPS 140 disponibles. |
| API | Más pequeña y difícil de usar mal que la de OpenSSL. |
El trabajo criptográfico lo hace un proveedor intercambiable. El equipo recomienda aws-lc-rs; ring es una alternativa que compila con facilidad en muchas plataformas, aunque no trae los algoritmos post-cuánticos. Para quien lo necesite, existen opciones aprobadas por FIPS 140.
Quién lo mantiene
rustls no es un proyecto aislado. Prossimo, la iniciativa de software en lenguajes seguros de la ISRG —la misma organización detrás de Let's Encrypt—, financia su desarrollo; su autor principal trabaja a tiempo completo gracias a ese respaldo. Eso le da una continuidad que no todas las bibliotecas de su tipo tienen.
En la práctica, rustls es la base de TLS en partes del ecosistema de Rust: por ejemplo, se usa como backend de clientes HTTP a través de integraciones como hyper-rustls. No conviene exagerar la lista de usuarios; lo verificable es que está presente en piezas muy usadas del ecosistema.
Un ejemplo de dependencia
En la mayoría de casos no usarás rustls directamente, sino a través de una biblioteca de más alto nivel que lo seleccionas como backend. Por ejemplo, con un cliente HTTP:
[dependencies]
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls"] }
Así tu programa habla TLS con rustls en lugar de depender de la OpenSSL del sistema. Eso elimina una dependencia nativa y simplifica la compilación, sobre todo en contenedores.
Matices honestos
rustls es sólido, pero no es un reemplazo idéntico de OpenSSL en todos los escenarios:
- Opciones de configuración. OpenSSL acumula décadas de perillas y modos.
rustlsofrece menos superficie de configuración por diseño; eso reduce errores, pero puede faltar una opción muy específica que necesites. - Compatibilidad. Con configuraciones TLS antiguas o certificados poco convencionales, puedes encontrar fricción.
rustlstiende a ser estricto con lo que acepta. - Adopción. Migrar desde OpenSSL implica cambiar API y, a veces, revisar cómo cargas los certificados raíz.
Ninguno de estos puntos invalida la elección; son el tipo de detalle que conviene verificar antes de migrar un sistema en producción.
Cuándo usarlo
Elige rustls cuando empiezas un proyecto nuevo en Rust y quieres TLS sin arrastrar una dependencia nativa de C, o cuando la seguridad de memoria del stack es una prioridad explícita. Para contenedores mínimos es una ventaja clara, porque evita enlazar la OpenSSL del sistema. Mantén OpenSSL cuando dependas de una configuración muy específica que rustls todavía no cubra, o cuando una biblioteca de terceros lo exija.