Rustls — это современная библиотека TLS, написанная на Rust.
Rustls используется в производстве во многих организациях и проектах. Мы стремимся поддерживать достаточную стабильность поверхности API, но API может развиваться по мере того, как мы вносим изменения для внедрения новых функций или улучшения производительности.
У нас есть дорожная карта для наших будущих планов. У нас также есть тесты, позволяющие предотвратить снижение производительности и позволить вам оценить шумы на вашем целевом оборудовании.
Если вы хотите помочь, пожалуйста, посетите CONTRIBUTING.md.
Подробный список изменений в каждом выпуске можно найти по адресу https://github.com/rustls/rustls/releases.
https://docs.rs/rustls/
Rustls — это библиотека TLS, которая призвана обеспечить хороший уровень криптографической безопасности, не требует настройки для достижения этой безопасности и по умолчанию не предоставляет небезопасных функций или устаревшей криптографии.
Rustls реализует TLS1.2 и TLS1.3 как для клиентов, так и для серверов. См. полный список возможностей протокола.
Хотя Rustls сам по себе не зависит от платформы, по умолчанию он использует aws-lc-rs
для реализации криптографии в TLS. Дополнительные сведения об ограничениях поддержки платформы/архитектуры в aws-lc-rs см. в разделе часто задаваемых вопросов по aws-lc-rs.
ring
также доступен через функцию ring
Crate: см. поддерживаемые целевые платформы ring
.
Предоставляя собственный экземпляр структуры crypto::CryptoProvider
, вы можете заменить все криптографические зависимости ржавчины. Это путь к переносимости на более широкий набор архитектур и сред или требований соответствия. Дополнительную информацию см. в документации crypto::CryptoProvider
.
Указание default-features = false
при зависимости от Rustls приведет к удалению зависимости от aws-lc-rs.
Для работы Rustls требуется Rust 1.63 или более поздняя версия. Он имеет дополнительную зависимость от zlib-rs, для которой требуется версия 1.75 или новее.
Начиная с Rustls 0.22 появилась возможность выбирать поставщика криптографических примитивов, которые использует Rustls. Это может быть привлекательно, если у вас есть определенные требования к платформе, соответствию требованиям или функциям, которым не соответствует поставщик по умолчанию aws-lc-rs
.
Пользователи, желающие настроить используемого поставщика, могут сделать это при создании экземпляров ClientConfig
и ServerConfig
с использованием метода with_crypto_provider
для соответствующих типов построителя конфигурации. Дополнительную информацию см. в документации crypto::CryptoProvider
.
Rustls поставляется с двумя встроенными провайдерами, управляемыми соответствующими флагами функций:
aws-lc-rs
— включено по умолчанию, доступно при включенном флаге функции aws_lc_rs
.ring
— доступно при включенном флаге функции ring
. Подробную информацию о том, как выбираются поставщики, см. в документации по crypto::CryptoProvider
.
Сообщество также начало разработку сторонних провайдеров для Rustls:
rustls-mbedtls-provider
— провайдер, использующий mbedtls
для криптографии.boring-rustls-provider
— незавершенный провайдер, который использует boringssl
для криптографии.rustls-rustcrypto
— экспериментальный провайдер, использующий крипто-примитивы RustCrypto
для криптографии.rustls-post-quantum
: экспериментальный поставщик, который добавляет поддержку постквантового обмена ключами к поставщику aws-lc-rs по умолчанию.rustls-wolfcrypt-provider
— провайдер, находящийся в стадии разработки, который использует wolfCrypt
для криптографии. Мы также предоставляем простой пример написания собственного поставщика в примере custom-provider
. В этом примере реализуется минимальный провайдер, использующий части экосистемы RustCrypto
.
Дополнительную информацию по этой теме см. в разделе «Создание собственного CryptoProvider» документации.
В нашем каталоге примеров содержатся демонстрации, показывающие, как обрабатывать ввод-вывод с помощью stream::Stream
, а также более сложный асинхронный ввод-вывод с использованием mio
. Если вы уже используете Tokio для асинхронной среды выполнения, вы можете предпочесть использовать tokio-rustls
вместо прямого взаимодействия с Rustls.
Примеры на основе mio
являются наиболее полными и обсуждаются ниже. Пользователи, плохо знакомые с Rustls, могут предпочесть просмотреть простые примеры клиента/сервера, прежде чем углубляться в более сложные примеры MIO.
Пример программы-клиента MIO называется tlsclient-mio
.
Некоторые примеры запусков:
$ 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
(...)
или
$ cargo run --bin tlsclient-mio -- --http expired.badssl.com
TLS error: InvalidCertificate(Expired)
Connection closed
Запустите cargo run --bin tlsclient-mio -- --help
чтобы получить дополнительные параметры.
Пример программы сервера MIO называется tlsserver-mio
.
Вот пример запуска; мы запускаем эхо-сервер TLS, затем подключаемся к нему с помощью openssl
и 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
Запустите cargo run --bin tlsserver-mio -- --help
чтобы получить дополнительные параметры.
Rustls распространяется по следующим трем лицензиям:
Они обозначаются как LICENSE-APACHE, LICENSE-MIT и LICENSE-ISC соответственно. Вы можете использовать это программное обеспечение на условиях любой из этих лицензий по вашему выбору.
В этом проекте принят Кодекс поведения Rust. Отправьте электронное письмо по адресу [email protected], чтобы сообщить о любых случаях неправомерного поведения или если у вас есть какие-либо комментарии или вопросы по Кодексу поведения.