Организация ISRG (Internet Security Research Group), которая является учредителем проекта Let’s Encrypt и способствует развитию технологий для повышения защищённости интернета, объявила о публикации прослойки rustls-openssl-compat, позволяющей использовать библиотеку Rustls в качестве прозрачной замены OpenSSL. В настоящее время проектом уже предоставлена реализация rustls-libssl, обеспечивающая совместимость с libssl, а в разработке находится реализация libcrypto.
Реализованной в прослойке функциональности достаточно, чтобы обеспечить работу nginx на базе Rustls. Для перевода nginx на Rustls достаточно просто заменить библиотеки, без необходимости пересборки или изменения nginx. Из ближайших планов по развитию Rustls отмечается проведение оптимизации производительности в областях, в которых Rustls пока отстаёт от OpenSSL, и обеспечение поддержки RFC 8879 для сжатия сертификатов. Кроме того, в анонсе упомянут план перевода элементов инфраструктуры удостоверяющего цента Let’s Encrypt с OpenSSL на Rustls.
Проект Rustls развивает клиентскую и серверную реализацию протоколов TLS1.2 и TLS1.3 для использования в приложениях на языке Rust. Rustls не предоставляет собственную реализацию криптографических примитивов, а использует подключаемые провайдеры криптографических функций (поддерживаются алгоритмы ECDSA, Ed25519, RSA, ChaCha20-Poly1305, AES128-GCM и AES256-GCM). По умолчанию в Rustls используется криптопровайдер на базе библиотеки aws-lc-rs, которая развивается компанией Amazon и базируется на С++ коде BoringSSL, сопровождаемого Google форка OpenSSL. В качестве криптопровайдера также может использоваться библиотека ring, частично основанная на BoringSSL и комбинирующая код на ассемблере, С++ и Rust.
Примечательно, что nginx имеет встроенную поддержку сборки с BoringSSL, что позволяет использовать данную библиотеку напрямую без лишних прослоек. При этом кроме встроенной в Rustls поддержки библиотек aws-lc-rs и ring, основанных на коде BoringSSL, для Rustls также развивается несколько сторонних криптопровайдеров, позволяющих использовать библиотеки mbedtls (код на Си), BoringSSL (C++) и RustCrypto (Rust).