업데이트로 돌아가기
New releaseSep 8, 2026

rustls v/0.23.44

Rust로 구현된 메모리 안전 TLS 라이브러리로, TLS 1.2 및 1.3을 구현하며 플러그형 암호화 제공자, 클라이언트/서버 모드 및 인증서 기반 인증을 지원합니다.

공유

Rustls는 Rust로 작성된 현대적인 TLS 라이브러리입니다.

상태

Rustls는 많은 조직과 프로젝트에서 프로덕션 환경으로 사용되고 있습니다. 합리적인 API 표면 안정성을 유지하는 것을 목표로 하지만, 새로운 기능이나 성능 개선을 수용하기 위해 변경을 가하면서 API는 발전할 수 있습니다.

향후 계획에 대한 로드맵이 있습니다. 또한 성능 회귀를 방지하고 대상 하드웨어에서 rustls를 평가할 수 있도록 벤치마크도 제공합니다.

기여하고 싶다면 CONTRIBUTING.md를 참조하세요.

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

관리자들은 "rustls"를 (rust-TLS가 아닌) 러슬즈(rustles)로 발음하지만, 이에 대해 크게 신경 쓰지 않습니다.

변경 로그

각 릴리스의 자세한 변경 목록은 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 크레이트 사용을 권장합니다. aws-lc-rs의 플랫폼/아키텍처 지원 제약 조건에 대한 자세한 내용은 aws-lc-rs FAQ를 참조하세요.

공급자가 선택되는 방식에 대한 자세한 내용은 crypto::CryptoProvider 문서를 참조하세요.

(0.24 이전의 rustls 버전에서는 이 두 공급자가 모두 rustls 크레이트의 일부로 제공되었으며, Cargo 기능을 사용하여 선호하는 공급자를 선택했습니다. aws-lc-rs 기능이 기본적으로 활성화되어 있었습니다.)

타사 공급자

커뮤니티에서도 Rustls용 타사 공급자를 개발하기 시작했습니다:

이 주제에 대한 자세한 내용은 문서의 사용자 정의 CryptoProvider 만들기 섹션을 참조하세요.

예제 코드

examples 디렉터리에는 stream::Stream 헬퍼를 사용하여 I/O를 처리하는 방법과 mio를 사용하는 더 복잡한 비동기 I/O를 보여주는 데모가 포함되어 있습니다. 이미 비동기 런타임으로 Tokio를 사용하고 있다면 rustls와 직접 상호 작용하는 대신 tokio-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 에코 서버를 시작한 다음 openssltlsclient-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 버전 2.0.
  • MIT 라이선스.
  • ISC 라이선스.

이들은 각각 LICENSE-APACHE, LICENSE-MIT 및 LICENSE-ISC로 포함되어 있습니다. 이 소프트웨어는 선택에 따라 이 라이선스 중 하나의 조건에 따라 사용할 수 있습니다.

프로젝트 멤버십

  • Joe Birr-Pixton (@ctz, 프로젝트 창립자 - Prossimo의 전일제 펀딩)
  • Dirkjan Ochtman (@djc, 공동 관리자)
  • Daniel McCarney (@cpu, 공동 관리자)
  • Josh Aas (@bdaehlie, 프로젝트 관리)

행동 강령

이 프로젝트는 Rust 행동 강령을 채택합니다. 잘못된 행동 사례를 신고하거나 행동 강령에 대한 의견이나 질문이 있는 경우 [email protected]으로 이메일을 보내주세요.

카테고리