13.1 TLS and cryptography
- The only crypto backend is AWS-LC (primitives, TLS 1.3, QUIC), linked statically.
Implementation-defined. Crypto backend (D-8055; DIV-024; D-4739). The choice of library is up to the implementation; the protocol requirements (mTLS between nodes, TLS 1.3, AES-256-GCM, Ed25519, etc.) are mandatory. This implementation uses a library with the libssl API compatible with OpenSSL ≥ 3.0 (build parameter
OXL_TLS_BACKEND=openssl|awslc,opensslby default); a build with AWS-LC has not been verified.
- Inter-node traffic is always mTLS. It can be disabled only in the
devprofile with the flag--insecure-dev. - The built-in CA in the coordinator issues nodes certificates with the identifier
oxl://<cluster>/role/<role>/node/<id>in the SAN and rotates them (every 24 h by default). A new node proves its right to join with the tokenOXL_JOIN_TOKENor a Kubernetes service account token. - External listeners:
expose 443 tls(acme: domain)— a certificate via ACME;tls(cert: path, key: path)— your own.
Implementation-defined. ACME (D-8055; DIV-024; D-4739). An optional feature. This implementation contains no ACME: the certificate of an external listener is given by files (
tls(cert: …, key: …), the flags--tls-cert,--tls-key). The notationtls(acme: …)in the examples of the Standard (V.5) is kept as in the Standard; in acceptance runs it is replaced by flags.
- An implementation SHOULD hand encryption over to the kernel (kTLS) after the handshake.
Implementation-defined. kTLS (D-8055; DIV-024). The requirement is a SHOULD; this implementation encrypts in user space and does not use kTLS.
Implementation-defined. QUIC and HTTP/3 (D-8055; DIV-024; D-4739). An optional feature (
std.net.Quic, HTTP/3 instd.http, II.1). This implementation does not contain the QUIC transport.
- A client to an external address:
Users.connect(addr, tls: { ca: path?, pin: sha256"…"? }).
See also
Source: docs/spec/oxl-standard.en.md