Rustls é uma biblioteca TLS moderna escrita em Rust.
Rustls é usado na 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 roteiro para nossos planos futuros. Também temos benchmarks para evitar regressões de desempenho e permitir que você avalie ferrugem no hardware de destino.
Se você quiser ajudar, consulte CONTRIBUTING.md.
A lista detalhada de alterações em cada versão pode ser encontrada em https://github.com/rustls/rustls/releases.
https://docs.rs/rustls/
Rustls é uma biblioteca TLS que visa fornecer um bom nível de segurança criptográfica, não requer configuração para atingir essa segurança e não fornece recursos inseguros ou criptografia obsoleta por padrão.
Rustls implementa TLS1.2 e TLS1.3 para clientes e servidores. Veja a lista completa de recursos do protocolo.
Embora o próprio Rustls seja independente de plataforma, por padrão ele usa aws-lc-rs
para implementar a criptografia em TLS. Consulte as perguntas frequentes do aws-lc-rs para obter mais detalhes sobre as restrições de suporte de plataforma/arquitetura no aws-lc-rs.
ring
também está disponível por meio do recurso ring
Crate: consulte as plataformas de destino ring
suportadas.
Ao fornecer uma instância personalizada da estrutura crypto::CryptoProvider
, você pode substituir todas as dependências de criptografia de rustls. Este é um caminho para ser portátil para um conjunto mais amplo de arquiteturas e ambientes, ou requisitos de conformidade. Consulte a documentação crypto::CryptoProvider
para obter mais detalhes.
Especificar default-features = false
quando depender de rustls removerá a dependência de aws-lc-rs.
Rustls requer Rust 1.63 ou posterior. Possui uma dependência opcional do zlib-rs que requer 1.75 ou posterior.
Desde Rustls 0.22 é possível escolher o provedor das primitivas criptográficas que Rustls utiliza. Isso pode ser interessante se você tiver requisitos específicos de plataforma, conformidade ou recursos que não sejam atendidos pelo provedor padrão, aws-lc-rs
.
Os usuários que desejam personalizar o provedor em uso podem fazê-lo ao construir instâncias ClientConfig
e ServerConfig
usando o método with_crypto_provider
nos respectivos tipos de construtor de configuração. Consulte a documentação crypto::CryptoProvider
para obter mais detalhes.
Rustls vem com dois provedores integrados controlados por sinalizadores de recursos associados:
aws-lc-rs
– habilitado por padrão, disponível com o sinalizador de recurso aws_lc_rs
habilitado.ring
- disponível com o sinalizador de recurso ring
ativado. Consulte a documentação de crypto::CryptoProvider
para obter detalhes sobre como os provedores são selecionados.
A comunidade também começou a desenvolver fornecedores terceirizados para Rustls:
rustls-mbedtls-provider
- um provedor que usa mbedtls
para criptografia.boring-rustls-provider
- um provedor de trabalho em andamento que usa boringssl
para criptografia.rustls-rustcrypto
- um provedor experimental que usa as primitivas criptográficas do RustCrypto
para criptografia.rustls-post-quantum
: um provedor experimental que adiciona suporte para troca de chaves pós-quântica ao provedor aws-lc-rs padrão.rustls-wolfcrypt-provider
- um provedor de trabalho em andamento que usa wolfCrypt
para criptografia. Também fornecemos um exemplo simples de como escrever seu próprio provedor no exemplo custom-provider
. Este exemplo implementa um provedor mínimo usando partes do ecossistema RustCrypto
.
Consulte a seção Criando um CryptoProvider customizado da documentação para obter mais informações sobre este tópico.
Nosso diretório de exemplos 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á estiver usando o Tokio para um tempo de execução assíncrono, você pode preferir usar tokio-rustls
em vez de interagir diretamente com o rustls.
Os exemplos baseados mio
são os mais completos e discutidos abaixo. Os usuários novos no Rustls podem preferir olhar os exemplos simples de cliente/servidor antes de mergulhar nos exemplos mais complexos de MIO.
O programa de exemplo do cliente MIO é denominado tlsclient-mio
.
Alguns exemplos de execução:
$ cargo run --bin tlsclient-mio -- --http mozilla-modern.badssl.com
HTTP/1.1 200 OK
Server: nginx/1.6.2 (Ubuntu)
Date: Wed, 01 Jun 2016 18:44:00 GMT
Content-Type: text/html
Content-Length: 644
(...)
ou
$ cargo run --bin tlsclient-mio -- --http expired.badssl.com
TLS error: InvalidCertificate(Expired)
Connection closed
Execute cargo run --bin tlsclient-mio -- --help
para mais opções.
O programa de exemplo do servidor MIO é denominado tlsserver-mio
.
Aqui está um exemplo de execução; iniciamos um servidor de eco TLS e 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 -p 8443 localhost
hello world
^C
Execute cargo run --bin tlsserver-mio -- --help
para mais opções.
Rustls é distribuído sob as três licenças a seguir:
Eles estão incluídos como LICENSE-APACHE, LICENSE-MIT e LICENSE-ISC respectivamente. Você pode usar este software sob os termos de qualquer uma dessas licenças, a seu critério.
Este projeto adota o Código de Conduta Rust. Envie um e-mail para [email protected] para relatar qualquer caso de má conduta ou se tiver algum comentário ou dúvida sobre o Código de Conduta.