
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 incorporar nuevas funciones o mejoras de rendimiento.
Tenemos una hoja de ruta para nuestros planes futuros. También tenemos puntos de referencia para evitar regresiones de rendimiento y permitirle evaluar rustls en su hardware de destino.
Si desea ayudar, consulte CONTRIBUTING.md.
Los mantenedores pronuncian "rustls" como rustles (en lugar de rust-TLS), pero no tenemos una opinión firme al respecto.
Changelog
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 proporciona funciones inseguras ni criptografía obsoleta por defecto.
Rustls implementa TLS1.2 y TLS1.3 tanto para clientes como para servidores. Consulte la lista completa de funciones de protocolo.
Soporte de plataformas
Si bien Rustls en sí mismo 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, puede reemplazar todas las dependencias criptográficas de rustls. Esta es una ruta para ser portátil a un conjunto más amplio de arquitecturas y entornos, o para cumplir requisitos de cumplimiento normativo. Consulte la documentación de crypto::CryptoProvider para obtener 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 tiene requisitos específicos de plataforma, cumplimiento normativo o funciones.
A partir de 0.24, los usuarios deben proporcionar explícitamente un proveedor de criptografía al construir instancias de ClientConfig o ServerConfig. Consulte la documentación de crypto::CryptoProvider para obtener 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 la crateaws-lc-rspara criptografía. Si bien este proveedor puede ser más difícil de compilar en algunas plataformas, ofrece un rendimiento excelente y un conjunto de funciones completo (incluidos algoritmos poscuánticos).rustls-ring- un proveedor que utiliza la crateringpara criptografía. Este proveedor es más fácil de compilar en una variedad de plataformas, pero tiene un conjunto de funciones más limitado (por ejemplo, no admite algoritmos poscuánticos).
El equipo de Rustls recomienda utilizar la crate rustls-aws-lc-rs por su conjunto de funciones completo y su rendimiento. Consulte las preguntas frecuentes de aws-lc-rs para obtener más detalles sobre las restricciones de soporte de plataforma/arquitectura en aws-lc-rs.
Consulte la documentación de crypto::CryptoProvider para obtener detalles sobre cómo se seleccionan los proveedores.
(Para versiones de rustls anteriores a 0.24, ambos proveedores se distribuían como parte de la crate rustls, y se utilizaban 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 comenzado a desarrollar proveedores de terceros para Rustls:
boring-rustls-provider- un proveedor en desarrollo que utilizaboringsslpara criptografía.rustls-ccm- añade conjuntos de cifrado AES-CCM (TLS 1.2 y 1.3) utilizandoRustCrypto, para protocolos de IoT/dispositivos con restricciones (IEEE 2030.5, Matter, RFC 7925).rustls-graviola- un proveedor que utilizagraviolapara criptografía.rustls-mbedtls-provider- un proveedor que utilizambedtlspara criptografía.rustls-openssl- un proveedor que utiliza OpenSSL para criptografía.rustls-rustcrypto- un proveedor experimental que utiliza las primitivas criptográficas deRustCryptopara criptografía.rustls-symcrypt- un proveedor que utiliza la biblioteca SymCrypt de Microsoft.rustls-wolfcrypt-provider- un proveedor en desarrollo que utilizawolfCryptpara criptografía.
Consulte 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 utilizando el asistente stream::Stream, así como E/S asíncrona más compleja utilizando mio. Si ya está utilizando Tokio para un runtime asíncrono, puede preferir utilizar tokio-rustls en lugar de interactuar directamente con rustls.
Los ejemplos basados en mio son los más completos y se analizan a continuación. Los usuarios nuevos en Rustls pueden preferir mirar los ejemplos simples de cliente/servidor antes de sumergirse en los ejemplos MIO más complejos.
Programa de ejemplo de cliente
El programa de ejemplo de cliente MIO se llama tlsclient-mio.
Algunas ejecuciones de muestra:
$ cargo run --bin tlsclient-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 tlsclient-mio -- --help para ver más opciones.
Programa de ejemplo de servidor
El programa de ejemplo de servidor MIO se llama tlsserver-mio.
Aquí hay una ejecución de muestra; iniciamos un servidor echo TLS, luego nos conectamos a él con openssl y tlsclient-mio:
$ cargo run --bin tlsserver-mio -- --certs test-ca/rsa-2048/end.fullchain --key test-ca/rsa-2048/end.key -p 8443 echo &
$ echo hello world | openssl s_client -ign_eof -quiet -connect localhost:8443
depth=2 CN = ponytown RSA CA
verify error:num=19:self signed certificate in certificate chain
hello world
^C
$ echo hello world | cargo run --bin tlsclient-mio -- --cafile test-ca/rsa-2048/ca.cert --port 8443 localhost
hello world
^C
Ejecute cargo run --bin tlsserver-mio -- --help para ver más opciones.
Licencia
Rustls se distribuye bajo las siguientes tres licencias:
- Licencia Apache versión 2.0.
- Licencia MIT.
- Licencia ISC.
Estas se incluyen como LICENSE-APACHE, LICENSE-MIT y LICENSE-ISC respectivamente. Puede utilizar este software bajo los términos de cualquiera de estas licencias, a su elección.
Membresía del proyecto
- Joe Birr-Pixton (@ctz, Fundador del proyecto - financiado a tiempo completo por Prossimo)
- Dirkjan Ochtman (@djc, Co-mantenedor)
- Daniel McCarney (@cpu, Co-mantenedor)
- Josh Aas (@bdaehlie, Gestión del proyecto)
Código de conducta
Este proyecto adopta el Código de conducta de Rust. Por favor, envíe un correo electrónico a [email protected] para informar cualquier caso de mala conducta, o si tiene algún comentario o pregunta sobre el Código de conducta.