
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.