
rustls v/0.23.44
Biblioteca TLS con seguridad de memoria en Rust que implementa TLS 1.2 y 1.3 con proveedores criptográficos conectables, modos cliente/servidor y autenticación basada en certificados.
Rustls es una biblioteca TLS moderna escrita en Rust.
Estado
Rustls se utiliza en producción en muchas organizaciones y proyectos. Nuestro objetivo es mantener una estabilidad razonable de la superficie de la API, pero la API puede evolucionar a medida que realizamos cambios para adaptarnos a nuevas funcionalidades o mejoras de rendimiento.
Tenemos una hoja de ruta con nuestros planes futuros. También tenemos benchmarks para prevenir regresiones de rendimiento y permitirte evaluar rustls en tu hardware objetivo.
Si deseas ayudar, consulta CONTRIBUTING.md.
Los mantenedores pronuncian "rustls" como rustles (en lugar de rust-TLS), pero no tenemos una opinión firme al respecto.
Registro de cambios
La lista detallada de cambios en cada versión se puede encontrar en https://github.com/rustls/rustls/releases.
Documentación
Enfoque
Rustls es una biblioteca TLS que tiene como objetivo proporcionar un buen nivel de seguridad criptográfica, no requiere configuración para lograr esa seguridad y no ofrece funcionalidades inseguras ni criptografía obsoleta por defecto.
Rustls implementa TLS1.2 y TLS1.3 tanto para clientes como para servidores. Consulta la lista completa de características del protocolo.
Soporte de plataformas
Aunque Rustls en sí es independiente de la plataforma, requiere el uso de primitivas criptográficas
para implementar los algoritmos criptográficos utilizados en TLS. En Rustls, un
crypto::CryptoProvider representa una colección de implementaciones de primitivas criptográficas.
Al proporcionar una instancia personalizada de la estructura crypto::CryptoProvider, puedes
reemplazar todas las dependencias criptográficas de rustls. Esta es una vía para ser portable
a un conjunto más amplio de arquitecturas y entornos, o a requisitos de cumplimiento. Consulta la
documentación de crypto::CryptoProvider para más detalles.
Proveedores de criptografía
Desde Rustls 0.22 ha sido posible elegir el proveedor de las primitivas criptográficas que utiliza Rustls. Esto puede resultar atractivo si tienes requisitos específicos de plataforma, cumplimiento o funcionalidades.
A partir de 0.24, los usuarios deben proporcionar explícitamente un proveedor de criptografía al construir instancias de ClientConfig o
ServerConfig. Consulta la documentación de crypto::CryptoProvider para más detalles.
Proveedores de primera parte
El proyecto Rustls mantiene actualmente dos proveedores de criptografía:
rustls-aws-lc-rs- un proveedor que utiliza el crateaws-lc-rspara criptografía. Aunque este proveedor puede ser más difícil de compilar en algunas plataformas, ofrece un excelente rendimiento y un conjunto completo de funcionalidades (incluidos algoritmos post-cuánticos).rustls-ring- un proveedor que utiliza el crateringpara criptografía. Este proveedor es más fácil de compilar en una variedad de plataformas, pero tiene un conjunto de funcionalidades más limitado (por ejemplo, no admite algoritmos post-cuánticos).
El equipo de Rustls recomienda usar el crate rustls-aws-lc-rs por su conjunto completo de funcionalidades
y rendimiento. Consulta las preguntas frecuentes de aws-lc-rs para más detalles sobre las
restricciones de soporte de plataforma/arquitectura en aws-lc-rs.
Consulta la documentación de crypto::CryptoProvider para obtener detalles sobre cómo se
seleccionan los proveedores.
(Para versiones de rustls anteriores a la 0.24, ambos proveedores se distribuían como parte del crate
rustls, y se usaban las características de Cargo para seleccionar el proveedor preferido. La característica aws-lc-rs
estaba habilitada por defecto).
Proveedores de terceros
La comunidad también ha desarrollado muchos proveedores de terceros para Rustls. Algunos de especial interés incluyen:
rustls-graviola- un proveedor que usagraviolapara criptografía.rustls-symcrypt- un proveedor que usa la biblioteca SymCrypt de Microsoft.
Para más proveedores de terceros, consulta PROVIDERS.md.
Consulta la sección Making a custom CryptoProvider de la documentación para obtener más información sobre este tema.
Código de ejemplo
Nuestro directorio examples contiene demos que muestran cómo manejar E/S usando el
helper stream::Stream, así como E/S asíncrona más compleja usando mio.
Si ya estás usando Tokio como runtime asíncrono, puede que prefieras usar
tokio-rustls en lugar de interactuar directamente con rustls.
Los ejemplos basados en mio son los más completos y se comentan a continuación. Los usuarios
nuevos en Rustls pueden preferir revisar los ejemplos simples de cliente/servidor antes de
sumergirse en los ejemplos más complejos de MIO.
Programa de ejemplo de cliente
El programa de ejemplo de cliente MIO se llama tls-client-mio.
Algunas ejecuciones de ejemplo:
$ cargo run --bin tls-client-mio -- --http jbp.io
HTTP/1.1 200 OK
Date: Tue, 23 Jun 2026 16:13:40 GMT
Content-Type: text/html; charset=utf-8
Connection: close
(...)
Ejecute cargo run --bin tls-client-mio -- --help para ver más opciones.
Programa de ejemplo del servidor
El programa de ejemplo del servidor MIO se llama tls-server-mio.
Aquí hay una ejecución de muestra; iniciamos un servidor de eco TLS y luego nos conectamos a él con
openssl y tls-client-mio: