
rustls v/0.23.44
Безопасная по памяти TLS-библиотека на Rust, реализующая TLS 1.2 и 1.3, с подключаемыми криптопровайдерами, клиентским/серверным режимами и аутентификацией на основе сертификатов.
Rustls — это современная библиотека TLS, написанная на Rust.
Статус
Rustls используется в продакшене во многих организациях и проектах. Мы стремимся поддерживать разумную стабильность поверхности API, но API может развиваться по мере внесения изменений для поддержки новых функций или улучшений производительности.
У нас есть дорожная карта на будущее. Также у нас есть бенчмарки, чтобы предотвращать регрессии производительности и дать вам возможность оценить rustls на вашем целевом оборудовании.
Если вы хотите помочь, пожалуйста, обратитесь к CONTRIBUTING.md.
Мейнтейнеры произносят «rustls» как «растлз» (а не «раст-TLS»), но мы не придаём этому большого значения.
Журнал изменений
Подробный список изменений в каждом релизе можно найти на https://github.com/rustls/rustls/releases.
Документация
Подход
Rustls — это библиотека TLS, которая стремится обеспечить высокий уровень криптографической безопасности, не требует настройки для достижения этой безопасности и по умолчанию не предоставляет небезопасных функций или устаревшей криптографии.
Rustls реализует TLS1.2 и TLS1.3 как для клиентов, так и для серверов. См. полный список возможностей протокола.
Поддержка платформ
Хотя сам Rustls не зависит от платформы, для реализации криптографических алгоритмов, используемых в TLS,
требуется использование криптографических примитивов. В Rustls структура
crypto::CryptoProvider представляет собой набор реализаций криптографических примитивов.
Предоставив собственный экземпляр структуры crypto::CryptoProvider, вы
можете заменить все криптографические зависимости rustls. Это путь к переносимости
на более широкий набор архитектур и окружений или к выполнению требований соответствия.
Подробнее см. в документации crypto::CryptoProvider.
Криптографические провайдеры
Начиная с Rustls 0.22 появилась возможность выбирать провайдера криптографических примитивов, которые использует Rustls. Это может быть полезно, если у вас есть особые требования к платформе, соответствию или функциональности.
Начиная с версии 0.24 пользователи должны явно указывать криптографического провайдера при создании экземпляров
ClientConfig или ServerConfig. Подробнее см. в документации crypto::CryptoProvider.
Собственные провайдеры
Проект Rustls в настоящее время поддерживает два криптографических провайдера:
rustls-aws-lc-rs— провайдер, использующий крейтaws-lc-rsдля криптографии. Хотя этот провайдер может быть сложнее собрать на некоторых платформах, он обеспечивает отличную производительность и полный набор функций (включая постквантовые алгоритмы).rustls-ring— провайдер, использующий крейтringдля криптографии. Этот провайдер проще собрать на различных платформах, но его набор функций более ограничен (например, он не поддерживает постквантовые алгоритмы).
Команда Rustls рекомендует использовать крейт rustls-aws-lc-rs из-за его полного набора функций
и производительности. См. FAQ по aws-lc-rs для получения более подробной информации
об ограничениях поддержки платформ/архитектур в aws-lc-rs.
См. документацию crypto::CryptoProvider для получения подробной информации о том, как выбираются
провайдеры.
(Для версий rustls до 0.24 оба этих провайдера поставлялись в составе крейта rustls,
а для выбора предпочтительного провайдера использовались фичи Cargo. Фича aws-lc-rs
была включена по умолчанию.)
Сторонние провайдеры
Сообщество также начало разрабатывать сторонние провайдеры для Rustls:
boring-rustls-provider— провайдер в разработке, использующийboringsslдля криптографии.rustls-ccm— добавляет наборы шифров AES-CCM (TLS 1.2 и 1.3) на основеRustCryptoдля протоколов Интернета вещей/устройств с ограниченными ресурсами (IEEE 2030.5, Matter, RFC 7925).rustls-graviola— провайдер, использующийgraviolaдля криптографии.rustls-mbedtls-provider— провайдер, использующийmbedtlsдля криптографии.rustls-openssl— провайдер, использующий OpenSSL для криптографии.rustls-rustcrypto— экспериментальный провайдер, использующий криптографические примитивы изRustCryptoдля криптографии.rustls-symcrypt— провайдер, использующий библиотеку SymCrypt от Microsoft.rustls-wolfcrypt-provider— провайдер в разработке, использующийwolfCryptдля криптографии.
См. раздел Создание собственного CryptoProvider документации для получения дополнительной информации по этой теме.
Примеры кода
Наш каталог examples содержит демонстрационные примеры, показывающие, как работать с вводом/выводом с помощью
хелпера stream::Stream, а также более сложный асинхронный ввод/вывод с использованием mio.
Если вы уже используете Tokio в качестве асинхронной среды выполнения, возможно, вы предпочтёте использовать
tokio-rustls вместо прямого взаимодействия с rustls.
Примеры на основе mio являются наиболее полными и рассматриваются ниже. Пользователи,
новые для Rustls, возможно, предпочтут сначала посмотреть на простые примеры клиента/сервера, прежде чем
углубляться в более сложные примеры MIO.
Пример программы-клиента
Пример программы-клиента на MIO называется tlsclient-mio.
Несколько примеров запуска:
$ 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
(...)
Выполните 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 --port 8443 localhost
hello world
^C
Выполните cargo run --bin tlsserver-mio -- --help, чтобы увидеть дополнительные параметры.
Лицензия
Rustls распространяется на условиях следующих трёх лицензий:
- Apache License version 2.0.
- MIT license.
- ISC license.
Эти лицензии включены в состав проекта как LICENSE-APACHE, LICENSE-MIT и LICENSE-ISC соответственно. Вы можете использовать это программное обеспечение на условиях любой из этих лицензий по вашему выбору.
Участники проекта
- Джо Бирр-Пикстон (@ctz, основатель проекта — на полную ставку финансируется Prossimo)
- Диркьян Охтман (@djc, со-мейнтейнер)
- Дэниел Маккарни (@cpu, со-мейнтейнер)
- Джош Аас (@bdaehlie, управление проектом)
Кодекс поведения
Этот проект использует Кодекс поведения Rust. Пожалуйста, сообщайте о любых случаях нарушения по адресу [email protected], а также если у вас есть комментарии или вопросы по Кодексу поведения.