EpicGames/lore · error
Failed client config
Error message
Failed client config
What it means
This expect wraps QuicClientConfig::try_from(crypto_config), converting a rustls::ClientConfig into quinn's QuicClientConfig. The conversion only fails when the rustls config uses an unsupported cipher suite / crypto provider (e.g. rustls built with a provider quinn's quic requirements don't satisfy).
Solutions
- Check the try_from error message naming the unsupported cipher suite or provider
- Enable a QUIC-compatible CryptoProvider (ring or aws-lc-rs) feature on rustls/quinn in Cargo.toml
- Ensure quinn and rustls versions are compatible (align on the same rustls major, e.g. quinn 0.11 + rustls 0.23)
- Build the ClientConfig via the provider-aware builder API (builder_with_protocol_versions + CryptoProvider)
Example fix
// before
QuicClientConfig::try_from(crypto_config).expect("Failed client config")
// after
QuicClientConfig::try_from(crypto_config)
.unwrap_or_else(|e| panic!("Failed client config: {e:?} — check rustls CryptoProvider features")) Defensive patterns
Strategy: validation
Validate before calling
// ensure a QUIC-safe provider is configured
#[cfg(feature = "rustls")] {
rustls::crypto::ring::default_provider().install_default().ok();
} Prevention
- Keep quinn and rustls versions aligned (same rustls major)
- Enable a QUIC-compatible CryptoProvider feature (ring or aws-lc-rs)
- Avoid mixing crypto providers in one dependency tree
- Surface the try_from error detail instead of a bare expect
When it happens
Trigger: rustls ClientConfig built with a crypto provider or version whose negotiated suites are incompatible with QUIC (non-AEAD ciphers), or mixing rustls versions (e.g. rustls 0.23 with mismatched feature flags) so try_from rejects the config.
Common situations: Upgrading rustls/quinn majors and forgetting the CryptoProvider feature setup; building rustls with only non-QUIC-safe cipher suites; duplicate/mismatched ring vs aws-lc-rs providers in the dependency tree.
Understand the failure class
Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.
Related errors
- Missing QUIC certificate config
- Maintenance TLS is partially configured: cert_file and…
- No alpns provided
- No handshake data
- No protocol found on request
AI-assisted analysis of EpicGames/lore@074eb0b0d1 (2026-09-13).
Data as JSON: /api/errors/b8e96ff5bc87559d.
Report an issue: GitHub.
Appendix: source
Thrown at lore-server/src/quic/stream_handler.rs:893
let server = QuinnServer::start(
QuinnConfigBuilder::new()
.address(server_addr)
.cert_file(cert_path)
.pkey_file(key_path)
.stream_handler_factory(factory)
.build()
.unwrap(),
)
.expect("Failed Quinn server start");
let mut crypto_config = rustls::ClientConfig::builder()
.dangerous()
.with_custom_certificate_verifier(insecure_client_auth::SkipServerVerification::new())
.with_no_client_auth();
crypto_config.alpn_protocols = vec![protocol.as_bytes().into()];
let client_config = ClientConfig::new(Arc::new(
QuicClientConfig::try_from(crypto_config).expect("Failed client config"),
));
let client_addr: SocketAddr = "0.0.0.0:0".parse().unwrap();
let mut endpoint = Endpoint::client(client_addr).expect("Failed to create client endpoint");
endpoint.set_default_client_config(client_config);
let connection = endpoint
.connect(server_addr, "localhost")
.unwrap()
.await
.unwrap();
let (send, recv) = connection
.open_bi()
.await
.expect("Failed to setup bidirectional channel");
Harness {
send,View on GitHub (pinned to 074eb0b0d1)