Skip to content

Commit bc72aff

Browse files
committed
added example and updated docs
1 parent eb269b8 commit bc72aff

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

examples/simple-server-pkcs8.rs

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
extern crate native_tls;
2+
3+
use native_tls::{Identity, TlsAcceptor, TlsStream};
4+
use std::fs::File;
5+
use std::io::{Read, Write};
6+
use std::net::{TcpListener, TcpStream};
7+
use std::sync::Arc;
8+
use std::thread;
9+
10+
fn main() {
11+
let mut cert_file = File::open("test/cert.pem").unwrap();
12+
let mut certs = vec![];
13+
cert_file.read_to_end(&mut certs).unwrap();
14+
let mut key_file = File::open("test/key.pem").unwrap();
15+
let mut key = vec![];
16+
key_file.read_to_end(&mut key).unwrap();
17+
let pkcs8 = Identity::from_pkcs8(&certs, &key).unwrap();
18+
19+
let acceptor = TlsAcceptor::new(pkcs8).unwrap();
20+
let acceptor = Arc::new(acceptor);
21+
22+
let listener = TcpListener::bind("0.0.0.0:8443").unwrap();
23+
24+
fn handle_client(mut stream: TlsStream<TcpStream>) {
25+
let mut buf = [0; 1024];
26+
let read = stream.read(&mut buf).unwrap();
27+
let received = std::str::from_utf8(&buf[0..read]).unwrap();
28+
stream.write_all(format!("received '{}'", received).as_bytes()).unwrap();
29+
}
30+
31+
for stream in listener.incoming() {
32+
match stream {
33+
Ok(stream) => {
34+
let acceptor = acceptor.clone();
35+
thread::spawn(move || {
36+
let stream = acceptor.accept(stream).unwrap();
37+
handle_client(stream);
38+
});
39+
}
40+
Err(_e) => { /* connection failed */ }
41+
}
42+
}
43+
}

src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
//! * TLS/SSL client communication
2828
//! * TLS/SSL server communication
2929
//! * PKCS#12 encoded identities
30+
//! * PKCS#8 encoded identities
3031
//! * Secure-by-default for client and server
3132
//! * Includes hostname verification for clients
3233
//! * Supports asynchronous I/O for both the server and the client

0 commit comments

Comments
 (0)