Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Base Drafts | 1,556 | a month ago | 4 | Shell | ||||||
Internet-Drafts that make up the base QUIC specification | ||||||||||
Rust Web3 | 1,278 | 30 | 46 | a month ago | 25 | February 06, 2022 | 108 | mit | Rust | |
Ethereum JSON-RPC multi-transport client. Rust implementation of web3 library. ENS address: rust-web3.eth | ||||||||||
Goben | 514 | 6 days ago | 3 | mit | Go | |||||
goben is a golang tool to measure TCP/UDP transport layer throughput between hosts. | ||||||||||
Rust Native Tls | 393 | 2,328 | 438 | 19 days ago | 18 | November 01, 2022 | 46 | apache-2.0 | Rust | |
Ocaml Tls | 278 | a month ago | 16 | bsd-2-clause | OCaml | |||||
TLS in pure OCaml | ||||||||||
Quic | 218 | 2 years ago | 28 | September 18, 2021 | 1 | bsd-2-clause | Go | |||
quiwi 🥝 - QUIC implementation in Go. | ||||||||||
Mitigating Obsolete Tls | 183 | 2 years ago | 2 | other | PowerShell | |||||
Guidance for mitigating obsolete Transport Layer Security configurations. #nsacyber | ||||||||||
Tls Parser | 72 | 3 | 5 | 3 months ago | 18 | September 20, 2021 | 2 | apache-2.0 | Rust | |
TLS parser written in rust with nom | ||||||||||
Serve2 | 63 | 3 years ago | 2 | October 28, 2020 | mit | Go | ||||
Protocol detecting server library | ||||||||||
Go Ws Transport | 59 | 118 | 190 | a year ago | 37 | May 25, 2022 | 3 | other | Go | |
a websocket implementation of a go-libp2p transport |
An abstraction over platform-specific TLS implementations.
Specifically, this crate uses SChannel on Windows (via the schannel
crate),
Secure Transport on macOS (via the security-framework
crate), and OpenSSL (via
the openssl
crate) on all other platforms.
# Cargo.toml
[dependencies]
native-tls = "0.2"
An example client looks like:
extern crate native_tls;
use native_tls::TlsConnector;
use std::io::{Read, Write};
use std::net::TcpStream;
fn main() {
let connector = TlsConnector::new().unwrap();
let stream = TcpStream::connect("google.com:443").unwrap();
let mut stream = connector.connect("google.com", stream).unwrap();
stream.write_all(b"GET / HTTP/1.0\r\n\r\n").unwrap();
let mut res = vec![];
stream.read_to_end(&mut res).unwrap();
println!("{}", String::from_utf8_lossy(&res));
}
To accept connections as a server from remote clients:
extern crate native_tls;
use native_tls::{Identity, TlsAcceptor, TlsStream};
use std::fs::File;
use std::io::{Read};
use std::net::{TcpListener, TcpStream};
use std::sync::Arc;
use std::thread;
fn main() {
let mut file = File::open("identity.pfx").unwrap();
let mut identity = vec![];
file.read_to_end(&mut identity).unwrap();
let identity = Identity::from_pkcs12(&identity, "hunter2").unwrap();
let acceptor = TlsAcceptor::new(identity).unwrap();
let acceptor = Arc::new(acceptor);
let listener = TcpListener::bind("0.0.0.0:8443").unwrap();
fn handle_client(stream: TlsStream<TcpStream>) {
// ...
}
for stream in listener.incoming() {
match stream {
Ok(stream) => {
let acceptor = acceptor.clone();
thread::spawn(move || {
let stream = acceptor.accept(stream).unwrap();
handle_client(stream);
});
}
Err(e) => { /* connection failed */ }
}
}
}
rust-native-tls
is primarily distributed under the terms of both the MIT
license and the Apache License (Version 2.0), with portions covered by various
BSD-like licenses.
See LICENSE-APACHE, and LICENSE-MIT for details.