2016-05-30 20:34:05 +00:00
|
|
|
# Rustls
|
|
|
|
Rustls is a new, modern TLS library written in Rust. It's pronounced 'rustles'.
|
|
|
|
It uses [*ring*](https://github.com/briansmith/ring) for cryptography
|
|
|
|
and [libwebpki](https://github.com/briansmith/webpki) for certificate
|
|
|
|
verification.
|
|
|
|
|
|
|
|
# Status
|
|
|
|
Rustls is currently in development and hence unstable.
|
|
|
|
|
|
|
|
[![Build Status](https://travis-ci.org/ctz/rustls.svg?branch=master)](https://travis-ci.org/ctz/rustls)
|
|
|
|
|
|
|
|
# Approach
|
|
|
|
Rustls is built to a few rules:
|
|
|
|
|
|
|
|
- Modern, strong cryptography only:
|
|
|
|
- No RC4, no DES.
|
|
|
|
- No discrete-log DH or DSA.
|
|
|
|
- No discredited, little-used or legacy SSL/TLS features:
|
|
|
|
- No CBC-mode EtM ciphersuites.
|
|
|
|
- No unneccessary 'national pride' block ciphers like Camellia or ARIA.
|
|
|
|
- No renegotiation.
|
|
|
|
- No client authentication.
|
|
|
|
- No discrete-log DH. It's misdesigned in TLS.
|
|
|
|
- TLS1.2 or later only.
|
|
|
|
|
|
|
|
# Currently implemented
|
|
|
|
Client connections work to assorted internet servers. The
|
|
|
|
following ciphersuites are supported:
|
|
|
|
|
|
|
|
- `TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256`
|
|
|
|
- `TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384`
|
|
|
|
- `TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384`
|
|
|
|
- `TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256`
|
|
|
|
|
|
|
|
For ECDHE, the `nistp256` and `nistp384` curves are supported,
|
|
|
|
as well as `curve25519`.
|
|
|
|
|
|
|
|
The client test program is named `s_client`. It expects to
|
|
|
|
find root certificates in `/etc/ssl/certs/ca-certificates.crt`
|
|
|
|
and be given a hostname as its single argument. It connects
|
|
|
|
to that host and issues a basic HTTP request, eg:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ ./target/debug/s_client mozilla-modern.badssl.com
|
|
|
|
got HTTP/1.1 200 OK
|
|
|
|
Server: nginx/1.6.2 (Ubuntu)
|
|
|
|
Date: Mon, 30 May 2016 20:13:22 GMT
|
|
|
|
Content-Type: text/html
|
|
|
|
Content-Length: 644
|
|
|
|
Last-Modified: Tue, 12 Apr 2016 01:21:49 GMT
|
|
|
|
Connection: close
|
|
|
|
ETag: "570c4dad-284"
|
|
|
|
Strict-Transport-Security: max-age=15768000
|
|
|
|
Cache-Control: no-store
|
|
|
|
Accept-Ranges: bytes
|
|
|
|
|
|
|
|
<!DOCTYPE html>
|
|
|
|
<html>
|
|
|
|
<head>
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
|
|
<link rel="shortcut icon" href="/icons/favicon-green.ico"/>
|
|
|
|
<link rel="apple-touch-icon" href="/icons/icon-green.png"/>
|
|
|
|
<title>mozilla-modern.badssl.com</title>
|
|
|
|
<link rel="stylesheet" href="/style.css">
|
|
|
|
<style>body { background: green; }</style>
|
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<div id="content">
|
|
|
|
<h1>
|
|
|
|
mozilla-modern.<br>badssl.com
|
|
|
|
</h1>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div id="footer">
|
|
|
|
This site uses the Mozilla “<a href="https://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility">Modern</a>” TLS configuration.
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</body>
|
|
|
|
</html>
|
|
|
|
|
|
|
|
plaintext read error Error { repr: Custom(Custom { kind: ConnectionAborted, error: StringError("CloseNotify alert received") }) }
|
|
|
|
closing connection
|
|
|
|
```
|
|
|
|
|
|
|
|
or
|
|
|
|
|
|
|
|
```
|
|
|
|
$ ./target/debug/s_client expired.badssl.com
|
|
|
|
write rc=Ok(())
|
|
|
|
cannot process packet: Err(WebPKIError(CertExpired))
|
|
|
|
closing connection
|
|
|
|
```
|
|
|
|
|
|
|
|
# TODO list
|
|
|
|
- ALPN
|
|
|
|
- chacha20poly1305 bulk encryption support.
|
|
|
|
- Signing support in *ring* to unblock server work.
|
|
|
|
- Server support.
|
|
|
|
- Write some more sample programs.
|
2016-05-30 22:00:58 +00:00
|
|
|
- Stabilise and document public API.
|