Назад к обновлениям
New releaseSep 8, 2026

rustls v/0.23.44

Безопасная по памяти TLS-библиотека на Rust, реализующая TLS 1.2 и 1.3, с подключаемыми криптопровайдерами, клиентским/серверным режимами и аутентификацией на основе сертификатов.

Поделиться

Rustls — это современная библиотека TLS, написанная на Rust.

Статус

Rustls используется в продакшене во многих организациях и проектах. Мы стремимся поддерживать разумную стабильность поверхности API, но API может развиваться по мере внесения изменений для поддержки новых функций или улучшений производительности.

У нас есть дорожная карта на будущее. Также у нас есть бенчмарки, чтобы предотвращать регрессии производительности и дать вам возможность оценить rustls на вашем целевом оборудовании.

Если вы хотите помочь, пожалуйста, обратитесь к CONTRIBUTING.md.

Build Status Coverage Status (codecov.io) Documentation Chat OpenSSF Best Practices

Мейнтейнеры произносят «rustls» как «растлз» (а не «раст-TLS»), но мы не придаём этому большого значения.

Журнал изменений

Подробный список изменений в каждом релизе можно найти на https://github.com/rustls/rustls/releases.

Документация

https://docs.rs/rustls/

Подход

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], а также если у вас есть комментарии или вопросы по Кодексу поведения.

Категории