
rustls v/0.23.44
Biblioteca TLS memory-safe em Rust que implementa TLS 1.2 e 1.3 com provedores de criptografia plugáveis, modos cliente/servidor e autenticação baseada em certificados.
Rustls é uma biblioteca TLS moderna escrita em Rust.
Status
Rustls é usado em produção em muitas organizações e projetos. Nosso objetivo é manter uma estabilidade razoável da superfície da API, mas a API pode evoluir à medida que fazemos alterações para acomodar novos recursos ou melhorias de desempenho.
Temos um roadmap para nossos planos futuros. Também temos benchmarks para evitar regressões de desempenho e permitir que você avalie o rustls no seu hardware de destino.
Se você quiser ajudar, consulte CONTRIBUTING.md.
Os mantenedores pronunciam "rustls" como "rustles" (em vez de rust-TLS), mas não temos uma opinião forte sobre isso.
Changelog
A lista detalhada de alterações em cada versão pode ser encontrada em https://github.com/rustls/rustls/releases.
Documentação
Abordagem
Rustls é uma biblioteca TLS que visa fornecer um bom nível de segurança criptográfica, não exige configuração para alcançar essa segurança e não oferece recursos inseguros nem criptografia obsoleta por padrão.
Rustls implementa TLS1.2 e TLS1.3 para clientes e servidores. Consulte a lista completa de recursos do protocolo.
Suporte a plataformas
Embora o Rustls em si seja independente de plataforma, ele requer o uso de primitivas criptográficas para implementar os algoritmos de criptografia usados no TLS. No Rustls, um crypto::CryptoProvider representa um conjunto de implementações de primitivas criptográficas.
Ao fornecer uma instância personalizada da struct crypto::CryptoProvider, você pode substituir todas as dependências de criptografia do rustls. Esse é um caminho para ser portátil para um conjunto mais amplo de arquiteturas e ambientes, ou para requisitos de conformidade. Consulte a documentação de crypto::CryptoProvider para mais detalhes.
Provedores de criptografia
Desde o Rustls 0.22, é possível escolher o provedor das primitivas criptográficas que o Rustls utiliza. Isso pode ser atraente se você tiver requisitos específicos de plataforma, conformidade ou recursos.
A partir da versão 0.24, os usuários devem fornecer explicitamente um provedor de criptografia ao construir instâncias de ClientConfig ou ServerConfig. Consulte a documentação de crypto::CryptoProvider para mais detalhes.
Provedores de primeira parte
O projeto Rustls atualmente mantém dois provedores de criptografia:
rustls-aws-lc-rs- um provedor que usa o crateaws-lc-rspara criptografia. Embora esse provedor possa ser mais difícil de compilar em algumas plataformas, ele oferece excelente desempenho e um conjunto completo de recursos (incluindo algoritmos pós-quânticos).rustls-ring- um provedor que usa o crateringpara criptografia. Este provedor é mais fácil de compilar em várias plataformas, mas tem um conjunto de recursos mais limitado (por exemplo, não suporta algoritmos pós-quânticos).
A equipe do Rustls recomenda o uso do crate rustls-aws-lc-rs pelo seu conjunto completo de recursos e desempenho. Consulte o FAQ do aws-lc-rs para mais detalhes sobre as restrições de suporte de plataforma/arquitetura do aws-lc-rs.
Consulte a documentação de crypto::CryptoProvider para detalhes sobre como os provedores são selecionados.
(Para versões do rustls anteriores à 0.24, ambos os provedores eram distribuídos como parte do crate rustls, e os recursos do Cargo eram usados para selecionar o provedor preferido. O recurso aws-lc-rs era habilitado por padrão.)
Provedores de terceiros
A comunidade também começou a desenvolver provedores de terceiros para o Rustls:
boring-rustls-provider- um provedor em desenvolvimento que usaboringsslpara criptografia.rustls-ccm- adiciona suítes de cifras AES-CCM (TLS 1.2 e 1.3) usandoRustCrypto, para protocolos de IoT/dispositivos com recursos limitados (IEEE 2030.5, Matter, RFC 7925).rustls-graviola- um provedor que usagraviolapara criptografia.rustls-mbedtls-provider- um provedor que usambedtlspara criptografia.rustls-openssl- um provedor que usa OpenSSL para criptografia.rustls-rustcrypto- um provedor experimental que usa as primitivas criptográficas doRustCryptopara criptografia.rustls-symcrypt- um provedor que usa a biblioteca SymCrypt da Microsoft.rustls-wolfcrypt-provider- um provedor em desenvolvimento que usawolfCryptpara criptografia.
Consulte a seção Making a custom CryptoProvider da documentação para obter mais informações sobre este tópico.
Código de exemplo
Nosso diretório de examples contém demonstrações que mostram como lidar com E/S usando o auxiliar stream::Stream, bem como E/S assíncrona mais complexa usando mio. Se você já usa Tokio como runtime assíncrono, talvez prefira usar tokio-rustls em vez de interagir diretamente com o rustls.
Os exemplos baseados em mio são os mais completos e são discutidos abaixo. Usuários novos no Rustls podem preferir ver os exemplos simples de cliente/servidor antes de mergulhar nos exemplos mais complexos de MIO.
Programa de exemplo de cliente
O programa de exemplo de cliente MIO chama-se tlsclient-mio.
Algumas execuções de exemplo:
$ 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
(...)
Execute cargo run --bin tlsclient-mio -- --help para mais opções.
Programa de exemplo de servidor
O programa de exemplo de servidor MIO chama-se tlsserver-mio.
Aqui está uma execução de exemplo; iniciamos um servidor TLS de eco e então nos conectamos a ele com openssl e 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
Execute cargo run --bin tlsserver-mio -- --help para mais opções.
Licença
Rustls é distribuído sob as seguintes três licenças:
- Licença Apache versão 2.0.
- Licença MIT.
- Licença ISC.
Elas estão incluídas como LICENSE-APACHE, LICENSE-MIT e LICENSE-ISC, respectivamente. Você pode usar este software sob os termos de qualquer uma dessas licenças, à sua escolha.
Membros do projeto
- Joe Birr-Pixton (@ctz, Fundador do Projeto - financiado em tempo integral pelo Prossimo)
- Dirkjan Ochtman (@djc, Co-mantenedor)
- Daniel McCarney (@cpu, Co-mantenedor)
- Josh Aas (@bdaehlie, Gestão do Projeto)
Código de conduta
Este projeto adota o Código de Conduta do Rust. Envie um e-mail para [email protected] para relatar qualquer caso de má conduta, ou se tiver comentários ou perguntas sobre o Código de Conduta.