OxL Reference

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, openssl by default); a build with AWS-LC has not been verified.

  • Inter-node traffic is always mTLS. It can be disabled only in the dev profile 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 token OXL_JOIN_TOKEN or 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 notation tls(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 in std.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