commit | 203a2fd9c32004b03cc6236db6293bc38f9c45b2 | [log] [tgz] |
---|---|---|
author | Frederik Deweerdt <fdeweerdt@fastly.com> | Sun Feb 07 15:56:50 2021 -0800 |
committer | Frederik Deweerdt <fdeweerdt@fastly.com> | Wed Feb 10 11:05:04 2021 -0800 |
tree | e4ee08503747772d4a9ad16a99e85c8c5d1adbc4 | |
parent | d5e32519516e13520ddeffa85da97d2398197df2 [diff] |
Raw public keys (RFC 7250) support This PR adds RFC 7250 support for _server_ certificate raw certificates (client certificate types aren't added in this PR). It interops succesfully with this PR for BoringSSL: https://boringssl-review.googlesource.com/c/boringssl/+/45444 It adds three additional options to `cli`: - `-R` on the server side to add a raw cert - `-V` on the client side to verify raw certs - `-v` on the client side to express support for different certificate types
Picotls is a TLS 1.3 (RFC 8446) protocol stack written in C, with the following features:
Primary goal of the project is to create a fast, tiny, low-latency TLS 1.3 implementation that can be used with the HTTP/2 protocol stack and the upcoming QUIC stack of the H2O HTTP/2 server.
The TLS protocol implementation of picotls is licensed under the MIT license.
License and the cryptographic algorithms supported by the crypto bindings are as follows:
Binding | License | Key Exchange | Certificate | AEAD cipher |
---|---|---|---|---|
minicrypto | CC0 / 2-clause BSD | secp256r1, x25519 | ECDSA (P256)1 | AES-128-GCM, chacha20-poly1305 |
OpenSSL | OpenSSL | secp256r1, secp384r1, secp521r1, x25519 | RSA, ECDSA (P256) | AES-128-GCM, AES-256-GCM, chacha20-poly1305 |
Note 1: Minicrypto binding is capable of signing a handshake using the certificate's key, but cannot verify a signature sent by the peer.
If you have cloned picotls from git then ensure that you have initialised the submodules:
% git submodule init % git submodule update
Build using cmake:
% cmake . % make % make check
A dedicated documentation for using picotls with Visual Studio can be found in WindowsPort.md.
Developer documentation should be available on the wiki.
Run the test server (at 127.0.0.1:8443):
% ./cli -c /path/to/certificate.pem -k /path/to/private-key.pem 127.0.0.1 8443
Connect to the test server:
% ./cli 127.0.0.1 8443
Using resumption:
% ./cli -s session-file 127.0.0.1 8443
The session-file is read-write. The cli server implements a single-entry session cache. The cli server sends NewSessionTicket when it first sends application data after receiving ClientFinished.
Using early-data:
% ./cli -s session-file -e 127.0.0.1 8443
When -e
option is used, client first waits for user input, and then sends CLIENT_HELLO along with the early-data.
The software is provided under the MIT license. Note that additional licences apply if you use the minicrypto binding (see above).