Rustls는 Rust로 작성된 최신 TLS 라이브러리입니다.
Rustls는 많은 조직과 프로젝트의 프로덕션에서 사용됩니다. 우리는 합리적인 API 표면 안정성을 유지하는 것을 목표로 하고 있지만, 새로운 기능이나 성능 개선을 수용하기 위해 변경하면서 API가 발전할 수 있습니다.
우리는 미래 계획에 대한 로드맵을 가지고 있습니다. 또한 성능 퇴보를 방지하고 대상 하드웨어에서 바스락거리는 소리를 평가할 수 있는 벤치마크도 있습니다.
도움을 주고 싶으시면 CONTRIBUTING.md를 참조하세요.
각 릴리스의 자세한 변경 사항 목록은 https://github.com/rustls/rustls/releases에서 확인할 수 있습니다.
https://docs.rs/rustls/
Rustls는 우수한 수준의 암호화 보안을 제공하는 것을 목표로 하고 해당 보안을 달성하기 위해 구성이 필요하지 않으며 기본적으로 안전하지 않은 기능이나 사용되지 않는 암호화를 제공하지 않는 TLS 라이브러리입니다.
Rustls는 클라이언트와 서버 모두에 대해 TLS1.2 및 TLS1.3을 구현합니다. 프로토콜 기능의 전체 목록을 확인하세요.
Rustls 자체는 플랫폼 독립적이지만 기본적으로 TLS에서 암호화를 구현하기 위해 aws-lc-rs
사용합니다. aws-lc-rs의 플랫폼/아키텍처 지원 제약 조건에 대한 자세한 내용은 aws-lc-rs FAQ를 참조하세요.
ring
ring
크레이트 기능을 통해서도 사용할 수 있습니다. 지원되는 ring
대상 플랫폼을 참조하세요.
crypto::CryptoProvider
구조체의 사용자 정의 인스턴스를 제공함으로써 Rustls의 모든 암호화 종속성을 대체할 수 있습니다. 이는 더 광범위한 아키텍처 및 환경 또는 규정 준수 요구 사항에 맞게 이식할 수 있는 경로입니다. 자세한 내용은 crypto::CryptoProvider
설명서를 참조하세요.
Rustls에 따라 default-features = false
지정하면 aws-lc-rs에 대한 종속성이 제거됩니다.
Rustls에는 Rust 1.63 이상이 필요합니다. 1.75 이상이 필요한 zlib-rs에 대한 선택적 종속성이 있습니다.
Rustls 0.22부터 Rustls가 사용하는 암호화 기본 요소의 공급자를 선택하는 것이 가능해졌습니다. 기본 공급자인 aws-lc-rs
가 충족하지 못하는 특정 플랫폼, 규정 준수 또는 기능 요구 사항이 있는 경우 이는 매력적일 수 있습니다.
사용 중인 제공자를 사용자 정의하려는 사용자는 해당 구성 빌더 유형에서 with_crypto_provider
메소드를 사용하여 ClientConfig
및 ServerConfig
인스턴스를 구성할 때 그렇게 할 수 있습니다. 자세한 내용은 crypto::CryptoProvider
설명서를 참조하세요.
Rustls에는 관련 기능 플래그로 제어되는 두 개의 내장 공급자가 함께 제공됩니다.
aws-lc-rs
- 기본적으로 활성화되어 있으며 aws_lc_rs
기능 플래그가 활성화된 상태에서 사용할 수 있습니다.ring
- ring
기능 플래그가 활성화된 상태에서 사용할 수 있습니다. 공급자 선택 방법에 대한 자세한 내용은 crypto::CryptoProvider
설명서를 참조하세요.
커뮤니티는 또한 Rustls를 위한 제3자 제공업체를 개발하기 시작했습니다.
rustls-mbedtls-provider
- 암호화를 위해 mbedtls
사용하는 공급자입니다.boring-rustls-provider
- 암호화를 위해 boringssl
사용하는 진행 중인 공급자입니다.rustls-rustcrypto
- 암호화를 위해 RustCrypto
의 암호화 프리미티브를 사용하는 실험적인 공급자입니다.rustls-post-quantum
: 기본 aws-lc-rs 제공자에 포스트퀀텀 키 교환에 대한 지원을 추가하는 실험적 제공자입니다.rustls-wolfcrypt-provider
- 암호화를 위해 wolfCrypt
사용하는 진행 중인 공급자입니다. 또한 custom-provider
예제에서 자체 공급자를 작성하는 간단한 예제도 제공합니다. 이 예에서는 RustCrypto
생태계의 일부를 사용하여 최소 공급자를 구현합니다.
이 주제에 대한 자세한 내용은 설명서의 사용자 지정 CryptoProvider 만들기 섹션을 참조하세요.
예제 디렉토리에는 stream::Stream
도우미를 사용하여 I/O를 처리하는 방법과 mio
사용하는 보다 복잡한 비동기 I/O를 보여주는 데모가 포함되어 있습니다. 이미 비동기 런타임에 Tokio를 사용하고 있다면 Rustls와 직접 상호작용하는 대신 tokio-rustls
사용하는 것이 더 나을 수 있습니다.
mio
기반 예제는 가장 완벽하며 아래에서 설명합니다. Rustls를 처음 접하는 사용자는 더 복잡한 MIO 예제를 살펴보기 전에 간단한 클라이언트/서버 예제를 살펴보는 것을 선호할 수 있습니다.
MIO 클라이언트 예제 프로그램의 이름은 tlsclient-mio
입니다.
일부 샘플 실행:
$ cargo run --bin tlsclient-mio -- --http mozilla-modern.badssl.com
HTTP/1.1 200 OK
Server: nginx/1.6.2 (Ubuntu)
Date: Wed, 01 Jun 2016 18:44:00 GMT
Content-Type: text/html
Content-Length: 644
(...)
또는
$ cargo run --bin tlsclient-mio -- --http expired.badssl.com
TLS error: InvalidCertificate(Expired)
Connection closed
더 많은 옵션을 보려면 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 -p 8443 localhost
hello world
^C
더 많은 옵션을 보려면 cargo run --bin tlsserver-mio -- --help
실행하세요.
Rustls는 다음 세 가지 라이선스에 따라 배포됩니다.
이는 각각 LICENSE-APACHE, LICENSE-MIT 및 LICENSE-ISC로 포함됩니다. 귀하는 귀하의 선택에 따라 이러한 라이센스 조건에 따라 이 소프트웨어를 사용할 수 있습니다.
이 프로젝트는 Rust 행동 강령을 채택합니다. 위법 행위를 신고하거나 행동 강령에 대한 의견이나 질문이 있는 경우 [email protected]으로 이메일을 보내주세요.